首页 > 代码库 > Codeforces Round #373 (Div. 2)
Codeforces Round #373 (Div. 2)
题目链接:Codeforces Round #373 (Div. 2)
分析:只补了B,C,其他题再看看,做出几道说几道,QAQ
B题有两种操作,一种是交换两个字母的位置,另一种是改变字母,使得最后序列成为一个形如drdrd/rdrdr的序列。
在两种情况中取较小值。
我将奇数与偶数次位置分开处理,如果交换,则两个都加一;如果改变字母,则对应的奇/偶位置++,取两者较大者。
详情见代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 6 char s[100100]; 7 int op1,op2,n; 8 9 int check(char c)10 {11 int cou[2]={0,0};12 for(int i=1;i<=n;++i) if((s[i]==c) != (i&1)) cou[i&1]++;13 return max(cou[0],cou[1]);14 }15 int main()16 {17 scanf("%d",&n);18 scanf("%s",s+1);19 printf("%d\n",min(check(‘b‘),check(‘r‘)));20 }
C题题意是t秒后能得到的最大值,那么首先要找到小数点后的第一个不小于5的数,然后往回处理,详情见代码。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 6 char s[200200]; 7 int pos,n,t,loc; 8 bool flag,vis; 9 10 int main()11 {12 scanf("%d %d",&n,&t);13 scanf("%s",s);14 while(s[loc]!=‘.‘ && loc < n) loc++;15 pos=loc+1;16 while(pos < n && s[pos] < ‘5‘) pos++; 17 if(pos == n) {printf("%s\n",s);return 0;}18 while(t > 0)19 {20 t--,pos--;21 while(s[pos] == ‘9‘) pos--;22 //printf("%s\n",s);23 if(s[pos] == ‘.‘)24 {25 //printf("%s\n",s);26 pos--;27 while(pos >= 0 && s[pos] == ‘9‘) {s[pos] = ‘0‘;pos--;}28 if(pos >= 0) 29 {30 s[pos]++;31 for(int i=0;i<loc;++i) printf("%c",s[i]);puts("");32 return 0;33 }34 printf("1");35 for(int i=0;i<loc;++i) printf("%c",s[i]);puts("");36 return 0;37 }38 s[pos]++;39 if(s[pos] < ‘5‘) break; 40 }41 for(int i = 0;i <= pos;++i) printf("%c",s[i]);puts("");42 }
Codeforces Round #373 (Div. 2)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。