码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 1025C Plasticine zebra(思维)

时间:2018-08-23 00:23:23      阅读:382      评论:0      收藏:0      [点我收藏+]

标签:最大   targe   define   位置   ios   一个   deque   queue   题目   

题目链接: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\n",ans2);
56     return 0;
57 }

 

Codeforces 1025C Plasticine zebra(思维)

标签:最大   targe   define   位置   ios   一个   deque   queue   题目   

原文地址:https://www.cnblogs.com/ehanla/p/9520877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!