牛客网暑期ACM多校训练营(第五场)

牛客网暑期ACM多校训练营(第五场)


A. gpa

二分答案,然后就转化为是否满足
\(\frac {\sum s[i]c[i]}{\sum s[i]} ≥ D\),

\(\sum s[i]c[i] ≥ \sum s[i]D\),

\(\sum s[i](c[i]-D) ≥ 0\)

显然科目越少gpa越高,于是去掉最小的k个判断即可。


#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
#define PII pair<int,int>
#define MP make_pair
typedef long long ll;
const int N = 1e5 + 7;
using namespace std;
int n,k;struct node{int s,c;node(){}node(int a,int b) {c=a;s=b;}
}a[N];// 1. 2^n 暴力的做法
int ct(int s) {int ans = 0;for(int i=s;i;i-=i&-i)++ans;return ans;
}
double cal_1() {double ans = 0;rep(s,0,(1<<n)-1) if(ct(s)>=n-k) {int t1 = 0, t2 = 0;rep(i,0,n-1) if(s&(1<<i)) {t1 += a[i+1].s*a[i+1].c;t2 += a[i+1].s;}ans = max(ans,(1.0*t1)/t2);}return ans;
}//**
double c[N];
double solve(double x) {double ans = 0;rep(i,1,n) c[i] = a[i].s*(a[i].c-x);sort(c+1,c+1+n);rep(i,k+1,n) ans+=c[i];return ans;
}
double cal_2() {double l = 0, r = 1001.0,mid;rep(ti,1,30) {mid = (l+r)*0.5;if(solve(mid)>=0) l=mid;else r=mid;}return l;
}
int main() {srand(time(0));scanf("%d%d",&n,&k);rep(i,1,n) scanf("%d",&a[i].s);rep(i,1,n) scanf("%d",&a[i].c);
//    printf("%.10f\n",cal_1());printf("%.10f\n",cal_2());return 0;
}

E. room

考虑新的第i组人住在原来的第j个房间,不改变的人就是两个集合的交。然后二分图最大权匹配即可。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;
const int N = 305;
const int inf = 0x3f3f3f3f;int nx,ny,n;
int g[N][N],linker[N],lx[N],ly[N];
int slack[N];
bool visx[N], visy[N];
bool dfs(int x) {visx[x] = 1;for(int y = 0; y < ny; ++y) {if(visy[y])continue;int tmp = lx[x] + ly[y] - g[x][y];if(tmp == 0) {visy[y] = 1;if(linker[y] == -1||dfs(linker[y])) {linker[y] = x;return 1;}}else if(slack[y] > tmp)slack[y] = tmp;}return 0;
}
int KM() {memset(linker,-1,sizeof(linker));memset(ly,0,sizeof(ly));for(int i = 0; i < nx; ++i) {lx[i] = -inf;for(int j = 0; j < ny; ++j)if(g[i][j]>lx[i])lx[i]=g[i][j];}for(int x = 0; x < nx; ++x) {for(int i = 0; i < ny; ++i)slack[i] = inf;while(1) {memset(visx,0,sizeof(visx));memset(visy,0,sizeof(visy));if(dfs(x)) break;int d = inf;for(int i = 0; i < ny; ++i)if(!visy[i] && d > slack[i])d = slack[i];for(int i = 0; i < nx; ++i)if(visx[i])lx[i] -= d;for(int i = 0; i < ny; ++i) {if(visy[i]) ly[i] += d;else slack[i] -= d;}}}int res = 0;for(int i = 0; i < ny; ++i)if(linker[i] != -1)res += g[linker[i]][i];return res;
}
int a[301][4],b[301][4];
map<int,int> M;
int cal(int a[],int b[]) {M.clear(); int ans = 0;for (int i = 0; i < 4; ++i) M[a[i]]=1;for (int i = 0; i < 4; ++i) ans += M[b[i]];return ans;
}
int main() {while (~scanf("%d", &n)) {for (int i = 0; i < n; ++i)for (int j = 0; j < 4; ++j)scanf("%d",&a[i][j]);for (int i = 0; i < n; ++i)for (int j = 0; j < 4; ++j)scanf("%d",&b[i][j]);for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j)g[i][j] = cal(a[i],b[j]);nx = ny = n;printf("%d\n", 4*n-KM());}return 0;
}

F.take

考虑每个答案的贡献,就是\(p_i \Pi_{j<i,a_j>a_i} (1-pj)\),前缀乘积用树状数组维护。

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
typedef long long ll;
const int N = 2e5 + 7;
const ll mod = 998244353;
using namespace std;
ll q_pow(ll a,ll b) {ll ans = 1;while(b) {if(b&1) ans = (ans*a)%mod;a=(a*a)%mod;b >>= 1LL;}return ans;
}
ll inv;
vector<ll> v;
int getid(ll x) {return lower_bound(v.begin(),v.end(),x) - v.begin() + 1;
}
int cc;
ll B[N],b[N];
ll n;
ll p[N],a[N];
void init() {rep(i,0,2e5+1)B[i]=1;
}
ll ask(int x) {ll ans = 1;for(int i=x;i;i-=i&-i)ans=(ans*B[i])%mod;return ans;
}
void update(int x,ll v) {for(int i=x;i<=cc;i+=i&-i) B[i]=(B[i]*v)%mod;
}int main() {inv = q_pow(100LL,mod-2);scanf("%lld",&n);rep(i,1,n) scanf("%lld%lld",&p[i],&a[i]),v.pb(a[i]),p[i]=(p[i]*inv)%mod;sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end());cc = v.size();init();ll ans = 0;rep(i,1,n) {ans = (ans + (p[i]*ask(100000-getid(a[i])))%mod)%mod;update(100001-getid(a[i]),(1-p[i]+mod)%mod);}printf("%lld\n",ans);return 0;
}

G. max

相当于在[1,n/c],找最大的两个互质的数,相邻的两个数一定互质,再特判一下1即可。

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
typedef long long ll;
using namespace std;
ll c,n;
int main() {scanf("%lld%lld",&c,&n);ll a = (n/c)*c;ll b = (n/c-(n/c!=1))*c;if(__gcd(a,b)==c&&a>=1&&a<=n&&b>=1&&b<=n) printf("%lld\n",a*b);else puts("-1");return 0;
}

J. plan

尽量先选性价比最高的,特判几种情况就行了

#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
typedef unsigned long long ll;
using namespace std;
ll n, p2, p3, ans = 0;
int main() {scanf("%lld %lld %lld", &n, &p2, &p3);if(2*p3 >= 3*p2) {if(n%2 == 0) {ans = n/2*p2;}else {ans = (n/2+1)*p2;ans = min(ans,(n/2)*p2+p3);if(n>=3)ans = min(ans,(n-3)/2*p2+p3);}}else {if(n%3==0)ans = n/3*p3;else if(n%3==1) {ans = ((n-1)/3+1)*p3;ans = min(ans,((n-1)/3)*p3+p2);if(n>=4) ans = min(ans,(n-4)/3*p3+2*p2);}else if(n%3==2) {ans = (n/3+1)*p3;ans = min(ans,(n/3)*p3+p2);if(n>=2) ans = min(ans,(n-2)/3*p3+p2);}}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/9428070.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core TDD前传: 编写易于测试的代码 -- 缝

有时候不是我们不想做单元测试, 而是这代码写的实在是没法测试....举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢去使用它, 即使使用了也会遇到“车祸”. 为什么要测试/测试的好处它可以尽早发现…

【数位DP】好数(jzoj 1521)

好数 jzoj 1521 题目大意&#xff1a; 定义好数为转换为二进制后&#xff0c;有至少三个连续的位相同的数&#xff0c;现在要求一个范围内的好数个数 样例输入 0 16样例输出 5数据范围限制 0 < Low < UP < 2147483647 提示 提示&#xff1a; 对于50%测试&…

P4294-[WC2008]游览计划【斯坦纳树】

正题 题目链接:https://www.luogu.com.cn/problem/P4294 题目大意 n∗mn*mn∗m的网格&#xff0c;每个格子的修建费用不同&#xff0c;要求修建费用最小连接所有关键点。 解题思路 设fs,i,jf_{s,i,j}fs,i,j​表示目前连接关键点状态为sss&#xff0c;在(i,j)(i,j)(i,j)这个位…

「LibreOJ NOIP Round #1」旅游路线

「LibreOJ NOIP Round #1」旅游路线 题目链接 做法&#xff1a; 首先肯定要预处理些东西&#xff0c;来使单词询问达到\(o(logn)\)或者\(o(1)\)的复杂度&#xff0c;又因为距离这个东西的范围太大&#xff0c;我们考虑预处理一些费用相关的东西。考虑\(dp[s][j]\)表示从s出发花…

【招聘(北京)】东方国信 工业互联网

从工业领域的业务出发&#xff0c;结合现有的物联网、大数据、云计算等技术进行体系化建设。自主研发的智能检测传感器、自主开发的部署在生产单位的专家系统、自主设计通讯交互协议、自主开发的工业物联网通讯框架、自主开发的分布式存储中间件、自主研发的机理模型&#xff0…

纪中C组模拟赛总结(2019.7.5)

成绩&#xff1a; rankrankrank是有算其他dalaodalaodalao的 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4888lyflyflyf300300300100100100100100100100100100000111111hkyhkyhky280280280100100100100100100808080000121212wjjwjjwjj2702702701001001001…

2020牛客NOIP赛前集训营提高组(第四场)B-色球【链表】

正题 题目链接:https://ac.nowcoder.com/acm/contest/7611/B 题目大意 nnn个杯子&#xff0c;mmm个操作 在第zzz个杯子中依次加入xxx个颜色为yyy的球在第yyy个杯子中取出xxx个球&#xff0c;并询问最后一个拿出的球将第xxx个杯子的球依次拿出放入第yyy个杯子中 解题思路 每次…

POJ3613

POJ3613 题意&#xff1a;n条边构成的最短路 做法&#xff1a;倍增floyd #include <cstdio> #include <cstring> #include <algorithm> #define rep(i,a,b) for(int ia;i<b;i) typedef long long ll; const int N 207; const int inf 0x3f3f3f3f; using…

Ocelot-基于.NET Core的开源网关实现

写在前面API网关是系统内部服务暴露在外部的一个访问入口&#xff0c;类似于代理服务器&#xff0c;就像一个公司的门卫承担着寻址、限制进入、安全检查、位置引导等工作&#xff0c;我们可以形象的用下图来表示&#xff1a; 外部设备需要访问内部系统服务时必须要通过我们的AP…

【模拟】阿里郎(jzoj 2012)

阿里郎 jzoj 2012 题目大意&#xff1a; 有一个数n&#xff0c;求出它的所有约数d&#xff0c;有多少个约数就分多少种情况&#xff0c;每次分为d组&#xff0c;把1,d1,2d1……n-d1分为一组&#xff0c;以此类推&#xff0c;把2,d2,2d2……n-d2分为另一组&#xff0c;然后同…

[2020.10.25NOIP模拟赛]序列【Splay】

正题 题目链接:https://www.luogu.com.cn/problem/U136336?contestId36038 题目大意 第iii次找到第iii大的数字位置xix_ixi​并且翻转[i,xi][i,x_i][i,xi​]&#xff0c;求输出序列xxx 解题思路 记录一下每个排名在SplaySplaySplay中的位置&#xff0c;然后暴力翻转即可。 …

HDU2476

HDU2476 做法&#xff1a; 先想到用\(f[i]\)表示A的前i个字符变成B的最少涂得次数&#xff0c;不难写出方程&#xff0c;当\(A[i]≠B[i], f[i] max(f[j-1]cost[j][i])\), 当\(A[i]B[i]\)时&#xff0c;\(f[i]f[j-1]\) , \(cost[i][j]\) 表示将i到j涂成和B一样的最少的次数。现…

Blazor 0.5.0 升级及新特性介绍

前言喜大普奔&#xff0c; Blazor 0.5.0 在我刷了好几遍 Github &#xff08;表示功不可没&#xff09;以后&#xff0c;终于在 2018年7月25日发布了&#xff01;[Blazor 0.5.0 Announce] (https://blogs.msdn.microsoft.com/webdev/2018/07/25/blazor-0-5-0-experimental-rele…

【dfs】通行证(jzoj 2013)

通行证 jzoj 2013 题目大意&#xff1a; 有一个图&#xff0c;走某一条路需要某个通行证&#xff08;数据给出所有可选择的&#xff09;&#xff0c;现在要从某个点到另一个点&#xff0c;问最少要多少个通行证 样例输入 3 3 3 0 2 0 0 2 1 1 2 2样例输出 2 0 2数据范围限…

AT4378-[AGC027D]ModuloMatrix【构造】

正题 题目链接:https://atcoder.jp/contests/agc027/tasks/agc027_d 题目大意 n∗nn*nn∗n的网格&#xff0c;每个格子填一个数要求 所有数各不相同对于相邻的两个数ax,aya_x,a_yax​,ay​&#xff0c;max{ax,ay}%min{ax,ay}max\{a_x,a_y\}\%min\{a_x,a_y\}max{ax​,ay​}%mi…

HDU5693

HDU5693 做法&#xff1a; 同hdu2476也时两次dp的题&#xff0c;首先可以列出方程\(f[i] max(f[i-1], max(f[j-1](i-j1))*can[j][i])\)&#xff0c;\(can[j][i]\)表示从j到i能否完全消除。现在考虑如何求出\(can[l][r]\)&#xff0c;还是区间dp&#xff0c;任何一个长度≥2的等…

NuStore使用说明

简介.net core 部署有两种方式&#xff0c;一种是独立式部署&#xff08;SCD&#xff09;&#xff0c;另一种是框架依赖式部署&#xff08;FDD&#xff09;。以SCD方式生成发布包时&#xff0c;dotnet会将所有依赖打包到一个文件夹内&#xff0c;并为应用程序生成可执行文件。以…

【DP】【高精】逆序对(jzoj 2014)

逆序对 jzoj 2014 题目大意&#xff1a; 有一个长为n的序列&#xff08;由1,2,3,……n组成&#xff09;&#xff0c;问经过某种调整之后&#xff0c;有k个逆序对&#xff08;即在前面的一个数大于后面的一个数这样的对&#xff09;的种数&#xff0c;有多组数据&#xff0c;…

Codeforces274B

Codeforces274B 做法&#xff1a;树形dp&#xff0c;\(up[u]\)至少加多少次, \(down[u]\) 至少减多少次可以消去u这棵子树 转移&#xff1a;首先\(up[u] max(up[v]), down[u] max(down[u])\)&#xff0c;因为为了消除整颗子树一定要选最多的次数才能消完&#xff0c;那么现在…

HttpClientFactory与Steeltoe结合来完成服务发现

前言上一篇说了一下用HttpClientFactory实现了简单的熔断降级。这篇就来简单说说用HttpClientFactory来实现服务发现。由于标题已经好明显的说了Steeltoe因此这里会要求有Spring Clound的相关环境&#xff0c;本文也默认各位对这里有些许了解&#xff0c;所以不会涉及搭建过程的…