C. Plasticine zebra
http://codeforces.com/contest/1025/problem/C
题意:给你一串字符,你可以从某一处把字符串断开,并且翻转得到的两串字符串,在把他们拼接在一起,你可以进行多次这种操作,问你可以得到的最长的字符交替的序列的长度。
思路:一开始没想到怎么做,我们可以用一串字符来模拟一下,我们用数字给字符标号,我们有这样一个串(1,2,3,4) 我们从(2,3)处断开,翻转,拼接顺序不同我们可以得到下面的不同序列(2143)(4321)我们可以发现这个相当于是一个环形的字符串,这样我们只需要把原来的字符串变成环形的,找到环形字符串中满足条件的序列即可。我们可以把两个相同字符串拼接在一起,这样就可以直接处理。
#include <iostream>
#include <cstdio>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <vector>
#include <cmath>
#include <algorithm>
#include <queue>
using namespace std;
int main()
{
string s;
cin>>s;
int ans=1;
int len=s.size();
s+=s;
int res=1;
for(int i=1;i<s.size();i++)
{
if(s[i]!=s[i-1])
{
res++;
ans=max(ans,res);
}
else
{
res=1;
}
// cout<<i<<" "<<res<<endl;
}
cout<<min(ans,len);
// cout << "Hello world!" << endl;
return 0;
}