2020 GDUT Rating Contest III (Div2)
2020 GDUT Rating Contest III (Div2)
A Wormhole Sort
题意:
给出N个打乱顺序的数,和M条边(a,b,c)表示在a位置的数可以和在b位置的数交换,这条边的大小是c,问要使这组数恢复升序需要经过的大小最小的最大的边是多大。
解题思路:
直接二分答案,通过把大小大于等于答案的边用来连成一个连通块,看乱序的点是否在同一个连通块来判断该答案是否合法。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct node{int from,to,size;
}edge[100005];
int cow[100005],f[100005];
int n;
bool cmp(node a,node b){return a.size>b.size;
}
int father(int u){return f[u]==u?u:f[u]=father(f[u]);
}
void merge(int x,int y){int fx=father(x),fy=father(y);f[fx]=f[fy];return;
}
bool check(int x){for (int i=1;i<=n;i++)f[i]=i;for (int i=1;i<=x;i++)merge(edge[i].from,edge[i].to);for (int i=1;i<=n;i++)if (father(i)!=father(cow[i])) return false;return true;
}
int main(){int m;scanf("%d %d",&n,&m);bool flg=true;for (int i=1;i<=n;i++){scanf("%d",&cow[i]);if (cow[i]!=i) flg=false;}for (int i=1;i<=m;i++)scanf("%d %d %d",&edge[i].from,&edge[i].to,&edge[i].size);if (flg) {printf("-1\n");return 0;}sort(edge+1,edge+m+1,cmp);int l=0,r=m;while (r-l>1){int mid=(l+r)/2;if (check(mid)) r=mid;else l=mid;}printf("%d\n",edge[r].size);return 0;
}
B Loan Repayment
题意:
John欠了N加仑牛奶需要在K天内还清,他每天会最少还M加仑牛奶。在已经还了G加仑奶之后,对于一个正整数X,John会每天还max((N-G)/X,M)加仑奶。
求X的最大值。
1<=N,M,K<=1e12
解题思路:
二分答案,如果直接模拟的话会出现连续很多天给Y加仑奶的情况导致超时,所以只要用数学优化一下模拟的过程,让每次换奶的时候Y的值都会发生变化即可。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
long long n,k,m;
bool check(long long x){long long cnt=1LL*k*m;long long g=0,d;long long y=n/x;int t=0;while (y>m&&t<=k){if (ceil(1.0*(n-y*x-g)/y)+t<=k) d=ceil(1.0*(n-y*x-g)/y+0.000000000000001);else d=k-t+1;t+=d;g+=y*d;cnt+=(y-m)*d;if (cnt>=n) return true;y=(n-g)/x;}return false;
}
int main(){scanf("%lld %lld %lld",&n,&k,&m);long long l=1,r=1e12+1;while (r-l>1){long long mid=(l+r)/2;if (check(mid)) l=mid;else r=mid;}printf("%lld\n",l);return 0;
}
D Race
题意:
Bessie要跑K米,她每个时刻可以加速1或者减速1或者匀速跑,她结束跑步时速度不能高于X,现在给出N个X,问每个X对应需要的结束跑步的时间。
解题思路:
二分找最大速度,然后模拟一下算出时间即可。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int q,len,n,k;
bool check(long long x)
{long long a=1LL*(1+x)*x/2;long long b;if (x<q) b=0;else b=(q+x-1)*(x-q)/2;len=a+b;if (a+b<=k) return true;else return false;
}
int main(){scanf("%d %d",&k,&n);int ans;for (int i=1;i<=n;i++){scanf("%d",&q);int l=1,r=1000000;while (l<=r){int mid=(l+r)/2;if (check(mid)){ans=mid;l=mid+1;}else r=mid-1;}bool x=check(ans);long long t=ans;if (ans>=q) t+=ans-q;long long last=k-len;if (last!=0){t+=last/ans;if (last%ans!=0) t++;} printf("%lld\n",t);}
}
E.Word Processor
题意:
给出一个有N个单词的句子。要求拆成每行不超过K个字母输出(不能拆开完整的单词)。
解题思路:
直接判每个单词长度,如果符合要求就输出。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
int main(){int n,k;string s[105];scanf("%d%d",&n,&k);for (int i=1;i<=n;i++)cin>>s[i];for (int i=1;i<=n;){int cnt=s[i].size();int j=i+1;while (cnt+s[j].size()<=k&&j<=n) {cnt+=s[j].size();j++;}for (int k=i;k<j;k++)cout<<s[k]<<" ";printf("\n");i=j;}
}
H:Photoshoot
题意:
给长为N-1个数列a,求无相同元素的数列B使得对于1到n-1都有b[i]+b[i+1]=a[i],且对于所有的b[i]有1<=b[i]<=N。输出字典序最小的方案
解题思路:
直接从1开始枚举b[1]即可,找到第一种符合的方案就是字典序最小的方案。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
int n;
int a[1005],b[1005];
bool vis[1005];
bool check(int x){memset(vis,false,sizeof(vis));a[1]=x;vis[x]=true;for (int i=1;i<n;i++){if (b[i]-a[i]<=0||b[i]-a[i]>n) return false;if (vis[b[i]-a[i]]) return false;a[i+1]=b[i]-a[i];vis[b[i]-a[i]]=true;}return true;
}
int main(){scanf("%d",&n);for (int i=1;i<n;i++)scanf("%d",&b[i]);for (int i=1;i<b[1];i++)if (check(i)){for (int j=1;j<=n;j++)printf("%d ",a[j]);return 0;}
}
2020 GDUT Rating Contest III (Div2)相关推荐
- 2020 GDUT Rating Contest III (Div. 2) B - Loan Repayment 题解
原题 题目大意 给出NNN,KKK,MMM,假定已经给了GGG加仑奶,定义N−GX\frac{N-G}{X}XN−G为YYY,YYY最小为MMM,在KKK天后至少给NNN加仑奶,求最大的XXX. 题 ...
- 2020 GDUT Rating Contest III H. Photoshoot
H. Photoshoot 链接 题目描述 有n头牛,他们的序号从为1-n,现在他们按一定顺序排好,给出每对相邻的两头牛的序号之和,求出牛现在的序号. 题目分析 因为确定其中一头牛的序号,就可以得出所 ...
- 2020 GDUT Rating Contest I (Div. 2) A.Cow Gymnastics
来源 codeforces 2020 GDUT Rating Contest I (Div. 2) 题目: A. Cow Gymnastics In order to improve their ph ...
- 2020 GDUT Rating Contest II (Div. 2) A. Fence Planning
来源 codeforces 2020 GDUT Rating Contest II (Div. 2) CF链接 题目: Farmer John's N cows, conveniently numbe ...
- 2020 GDUT Rating Contest I A. Cow Gymnastics
A. Cow Gymnastics 链接 题目描述 有n头牛一起参加了k次比赛,给出k次比赛的排名,问共有几组牛满足 其中一头牛每次比赛都比另一头厉害. 题目分析 由于数据量比较小(1<=k&l ...
- 2020 GDUT Rating Contest I (Div. 2) A - Cow Gymnastics 题解
好吧--是时候补一下题解了 原题 题目大意 给出n只牛,k次排序,如果有一只牛一直比另外一只牛更前算作一对,输出一共有多少对. 题目分析 水题(数据规模小),一开始初始化全部都可以,然后一个个删去就行 ...
- 2020年育婴员(五级)报名考试及育婴员(五级)模拟考试题
题库来源:安全生产模拟考试一点通公众号小程序 2020年育婴员(五级)报名考试及育婴员(五级)模拟考试题,包含育婴员(五级)报名考试答案和解析及育婴员(五级)模拟考试题练习.由安全生产模拟考试一点通公 ...
- 2020中国大学生程序设计竞赛(CCPC) - 网络选拔赛 1005 Lunch (杭电 6892)
2020中国大学生程序设计竞赛(CCPC) - 网络选拔赛 1005 Lunch (杭电 6892)(类尼姆博弈) #include<cstdio> #include<iostrea ...
- 2020年煤矿采煤机(掘进机)操作找答案及煤矿采煤机(掘进机)操作模拟考试题
题库来源:安全生产模拟考试一点通公众号小程序 2020年煤矿采煤机(掘进机)操作找答案及煤矿采煤机(掘进机)操作模拟考试题,包含煤矿采煤机(掘进机)操作找答案答案和解析及煤矿采煤机(掘进机)操作模拟考 ...
最新文章
- UTF-8和Unicode
- Python -- xlrd,xlwt,xlutils 读写同一个Excel
- python渲染光线_python模板渲染配置文件
- (二)ElasticSearch6.1.1 Python API
- LeetCode547. Friends Circles 利用union find | bfs | dfs三种方法解决
- python大一基础题_python基础练习题
- Java快速入门学习笔记9 | Java语言中的方法
- 反射机制在JDBC连接中的使用
- sonarqube使用maven进行代码分析
- 基于虚拟帐号的邮件系统extmail(1)
- linux服务器怎么连接
- 1分钟获取上千ID,暴力破解、端口扫描、拖库攻击如何防范
- vb.net操作excel文件
- 使用nginx 和 switchhost实现自定义域名指向本地服务
- Unicode program converted
- 爬虫实战【6】Ajax内容解析-今日头条图集
- linux中搜索文件内容关键字
- 2015年校园招聘12家IT公司面试体验
- Win10系统怎么卸载软件
- 郁闷的出纳员 (splay) 题解
热门文章
- 《python数据分析与挖掘实战》笔记第5章
- “疫情”防控时期大势所趋,智慧社区尽显“智慧”迎来新的发展热潮
- (正则表达式三行) 假设有一段英文,其中有单词中间的字母i误写为I,请编写程序进行纠正。
- python123测验9程序题_python函数题
- javac 编译源文件出现java:1: 需要为 class、interface 或 enum、 [javac] 锘縫错误
- 3. codeblocks导入一个存在的项目
- Pro ASP.NET MVC 3 Framework 译文(一)
- 2019年小说精品整理免费API接口
- 网络安全管理员_三级_操作技能考核解题过程(1)
- Swift 读取,处理Json数据