Codeforces 1025C Plasticine zebra(思维)

Posted ehanla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 1025C Plasticine zebra(思维)相关的知识,希望对你有一定的参考价值。

题目链接:CF 1025C

题意:给定一个只有b和w的字符串,可以选定任意位置,得到两个字符串(可以是空串)并进行翻转,操作可以进行任意次,求连续的不同字符的最大长度。

题解:考虑翻转的意义,无非就是拼成一个环,可以从任意地方截取,我们可以得到把原字符串扩增一倍,在得到的新的字符串中寻找连续的不同字符的最大长度即答案。注意超过n选取n。

 1 #include <set>
 2 #include <map>
 3 #include <queue>
 4 #include <deque>
 5 #include <stack>
 6 #include <cmath>
 7 #include <cstdio>
 8 #include <vector>
 9 #include <string>
10 #include <cstring>
11 #include <fstream>
12 #include <iostream>
13 #include <algorithm>
14 using namespace std;
15 
16 #define eps 1e-8
17 #define PI acos(-1.0)
18 #define INF 0x3f3f3f3f
19 #define FAST_IO ios::sync_with_stdio(false)
20 
21 const int N=2e5+10;
22 typedef long long LL;
23 char s[N];
24 
25 int main(){
26     scanf("%s",s);
27     int n=strlen(s);
28     for(int i=0;i<n;i++) s[i+n]=s[i];
29     int ans1=1,ans2=1,id=-1;
30     if(s[0]==w) id=-1;
31     else id=1;
32     for(int i=1;i<2*n;i++){
33         if(s[i]==w){
34             if(id==1) ans1++,id=-1;
35             else{
36                 if(s[i]==b) ans1++,id=-1;
37                 else{
38                     ans1=1;
39                 }
40             }
41             ans2=max(ans1,ans2);
42         }
43         else{
44             if(id==-1) ans1++,id=1;
45             else{
46                 if(s[i]==w) ans1++,id=1;
47                 else{
48                     ans1=1;
49                 }
50             }
51             ans2=max(ans1,ans2);
52         }
53     }
54     if(ans2>n) ans2=n;
55     printf("%d
",ans2);
56     return 0;
57 }

 

以上是关于Codeforces 1025C Plasticine zebra(思维)的主要内容,如果未能解决你的问题,请参考以下文章

codeforce 1025C - Plasticine zebra (模拟)

CF1025C Plasticine zebra环状字符串/思维

codeforces上怎么看测试数据

如何看codeforces做了多少题

codeforces上怎么看测试数据

codeforces比赛后怎么看题解和答案