Educational Codeforces Round 25

来源:互联网 发布:淘宝上买电脑靠谱吗 编辑:程序博客网 时间:2024/05/21 10:46

Educational Codeforces Round 25

A

题意:给你一个01的字符串,0是个分界点,0把这个字符串分成(0的个数+1)个部分,分别求出这几部分1的个数。例如110011101 输出2031,100输出100,1001输出101

代码:

#include<stdio.h>using namespace std;int n;char a[100];int b[100];int main(){while(~scanf("%d",&n)){scanf("%s",a);int flag=0;int k=0;int cnt=0;for(int i=0; i<n; i++){if(a[i]=='1'){cnt++;flag=0;}else{if(flag==0){b[k++]=cnt;flag=1;cnt=0;}else if(flag==1){b[k++]=0;}}}b[k++]=cnt;for(int i=0; i<k; i++)printf("%d",b[i]);printf("\n");}return 0;}


B

题意:五子棋,表示可以放旗子,x表示Alice的棋子,o是敌人的棋子,现在轮到Alice,问Alice是否能赢。

代码:

#include<stdio.h>using namespace std;char a[11][11];int b,flag;int main(){flag=0;for(int i=0; i<10; i++)scanf("%s",a[i]);for(int i=0; i<10; i++)for(int j=0; j<10; j++){if(a[i][j]=='.'){b=0;for(int k=i+1; (k<=i+5)&&k<10; k++)if(a[k][j]=='X')b++;elsebreak;for(int k=i-1; (k>=i-5)&&k>=0; k--)if(a[k][j]=='X')b++;elsebreak;if(b>=4)flag=1;b=0;for(int k=j+1; (k<=j+5)&&k<10; k++)if(a[i][k]=='X')b++;elsebreak;for(int k=j-1; (k>=j-5)&&k>=0; k--)if(a[i][k]=='X')b++;elsebreak;if(b>=4)flag=1;b=0;for(int k=1; k<=5; k++)if((a[i+k][j+k]=='X')&&(i+k)<10&&(j+k)<10)b++;elsebreak;for(int k=1; k<=5; k++)if((a[i-k][j-k]=='X')&&(i-k)>=0&&(j-k)>=0)b++;elsebreak;if(b>=4)flag=1;b=0;for(int k=1; k<=5; k++)if((a[i+k][j-k]=='X')&&(i+k)<10&&(j-k)>=0)b++;elsebreak;for(int k=1; k<=5; k++)if((a[i-k][j+k]=='X')&&(i-k)>=0&&(j+k)<10)b++;elsebreak;if(b>=4)flag=1;if(flag==1)break;}elsecontinue;}if(flag)printf("YES\n");elseprintf("NO\n");return 0;}


C

题意:现在拥有的困难数为k,如果a[i]/2<=k,表示这个问题可以解决,如果啊a[i]>k/2则k*=2,直到a[i]<=k/2,并且k=max(k,a[i]),问k*=2的总次数,使得所有的a[i]<=k/2。

代码:

#include<stdio.h>#include<algorithm>using namespace std;int n;double m;double a[1100];int main(){while(~scanf("%d%lf",&n,&m)){for(int i=0; i<n; i++)scanf("%lf",&a[i]);sort(a,a+n);double k=m;int cnt=0;for(int i=0; i<n; i++){if(a[i]/2.0<=k){k=max(k,a[i]);continue;}else{while(1){k*=2;cnt++;if(a[i]/2.0<=k)break;}}k=max(k,a[i]);}printf("%d\n",cnt);}return 0;}


原创粉丝点击