解题报告:Codeforces Round #352 (Div. 2)
来源:互联网 发布:皇马4:1尤文 知乎 编辑:程序博客网 时间:2024/06/01 14:21
A.Summer Camp
题意:123456789101112```数字的字符串,询问第n个字符是什么(0<n<=1000)
思路:文件输出字符串存进数组
#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<iostream>using namespace std;char str[10000]={"123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500"};int main(){ //freopen("test.out","w",stdout); int n; while(scanf("%d",&n)==1) printf("%c\n",str[n-1]);}
B.Different is Good
题意:对于给定的小写字母字符串,问最少改变多少个字母使得字符串的所有字符都不同,如果无法做到,输出-1
思路:长度大于26时,输出-1,不然输出 长度-字符种类
#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<iostream>using namespace std;char str[100005];int A[30];int main(){ int n; while(scanf("%d",&n)==1) { memset(A,0,sizeof(A)); scanf("%s",str); int num=0; if(n>26){ printf("-1\n"); continue; } for(int i=0;i<n;i++){ int x = str[i]-'a'; if(A[x]==0){ num++; }A[x]++; } printf("%d\n",n-num); }}
C.Recycling Bottles
题意:两个给定初始位置的人和一个垃圾站的坐标,现在要捡完所有垃圾,每次捡一个垃圾后必须送回垃圾站才能继续捡下一个垃圾,所有垃圾的坐标给出,询问两人最小的路径和。
思路:捡完第一个垃圾后的路径长度都是一样的,所以只要选择最小的开始的组合就是答案
#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<iostream>#include<cmath>const double EPS = 1e-9;using namespace std;double dis[100005];int X[100005];int Y[100005];struct node{ double x; int id;};node d1[100005];node d2[100005];inline bool cmp(const node& a ,const node& b){ return a.x<b.x;}inline double DIS(int a,int b,int c,int d){ return sqrt(pow((double)a-c,2.0)+pow((double)b-d,2.0));}int main(){ int x0,y0,x1,y1,x2,y2; while(scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x0,&y0)==6) { double sum = 0; int n;scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d",&X[i],&Y[i]); dis[i]=DIS(X[i],Y[i],x0,y0); sum+=dis[i]*2; d1[i].x=DIS(X[i],Y[i],x1,y1)-dis[i];d1[i].id=i; d2[i].x=DIS(X[i],Y[i],x2,y2)-dis[i];d2[i].id=i; } sort(d1,d1+n,cmp); sort(d2,d2+n,cmp); double mi = min(d1[0].x,d2[0].x); for(int i=0;i<n;i++)if(d1[i].id!=d2[0].id) mi = min(mi,d1[i].x+d2[0].x); for(int i=0;i<n;i++)if(d2[i].id!=d1[0].id) mi = min(mi,d2[i].x+d1[0].x); printf("%.8f\n",sum+mi); }}
D.Robin Hood
题意:给定n个人手上的金币数,询问k次操作后最大和最小的金币数的差值,每次操作把拥有最多的金币数的人续一个金币给最小的金币数的人
思路:分别二分最小金币数和最大金币数,特判无论怎么都不能平均分配的情况,特判小心溢出。。。
#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<map>#include<iostream>using namespace std;int n,k;int A[500005];inline bool judge1(int x){ int y = k; for(int i=0;i<n&&y>=0&&A[i]<x;i++) { y -= ( x-A[i] ); }return y>=0;}inline bool judge2(int x){ int y = k; for(int i=n-1;i>=0&&y>=0&&A[i]>x;i--) { y -= ( A[i]-x ); }return y>=0;}int main(){ while(scanf("%d%d",&n,&k)==2) { long long sum = 0; for(int i=0;i<n;i++){ scanf("%d",&A[i]); sum+=A[i]; }int x = (sum+n-1)/n; sort(A,A+n); long long a = 0; int mi=0 ,mx= (long long)x*n==sum?0:1; for(int i=0;i<n&&A[i]<x;i++){ a+=(x-A[i]); } if(a<=(long long)k){ printf("%d\n",mx-mi); continue; } int s = A[0] , e = x ; while(s<e) { int m = (s+e)/2; if(m==s)break; if(judge1(m)){ s = m; }else { e = m-1; } }mi=s; if(s!=e)mi+=judge1(e); s = x ; e = A[n-1]; while(s<e) { int m = (s+e)/2; if(m==s)break; if(judge2(m)){ e = m; }else{ s = m+1; } }mx=e; if(s!=e)mx -=judge2(s); printf("%d\n",mx-mi); }}
E.Ultimate Weirdness of an Array
E不会做啊~~~~~
0 0
- 解题报告:Codeforces Round #352 (Div. 2)
- Codeforces Round #149 (Div. 2)解题报告
- Codeforces Round #180 (Div. 2) 解题报告
- Codeforces Round #190 (Div. 2) 解题报告
- Codeforces Round #191 (Div. 2) 解题报告
- Codeforces Round #189 (Div. 2) 解题报告
- Codeforces Round #142 (Div. 2) 解题报告
- Codeforces Round #229 (Div. 2) 解题报告
- Codeforces Round #241 (Div. 2) 解题报告
- Codeforces Round #262 (Div. 2)解题报告
- Codeforces Round #267 (Div. 2) 解题报告
- Codeforces Round #266 (Div. 2)解题报告
- Codeforces Round #268 (Div. 2) 解题报告
- Codeforces Round #271 (Div. 2) 解题报告
- Codeforces Round #274 (Div. 2) 解题报告
- Codeforces Round #276 (Div. 2) 解题报告
- Codeforces Round #277 (Div. 2) 解题报告
- Codeforces Round #224 (Div. 2)解题报告
- WP-PostViews浏览次数统计插件使用详解
- eclipse 注册Tiny
- MySQL与Oracle 差异比较之三函数
- chef的自述
- 第十二周上机实践项目-阅读程序-1
- 解题报告:Codeforces Round #352 (Div. 2)
- SpringMVC中@RequestMapping6个基本用法小结
- mAppWidget - 6. 手绘(自定义)地图的移动和旋转
- Hadoop Partitioner组件
- Unix环境高级编程(阅读笔记)----可靠信号
- Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告
- cacti结构浅析
- 缓存管理
- 2016"百度之星" - 测试赛(热身,陈题)1001,1002,1003,1004