首页 > 代码库 > 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 }
View Code

  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 }
View Code

 

   

Codeforces Round #373 (Div. 2)