题解 CF1025C 【Plasticine zebra】

ouuan

2018-08-20 14:08:16

Solution

抽象派题解... 设原串长这样(被分成了两段): ![](http://r.photo.store.qq.com/psb?/V11ZEfn31hRqZy/8gpWNgbn27GsLamvSW*XpfAv7xV0nMH263AwqRwZ51Y!/r/dDABAAAAAAAA) 操作后就长这样: ![](http://r.photo.store.qq.com/psb?/V11ZEfn31hRqZy/6yIfDOM7wI46pFAOoRC2bBJ0sqJDovA9umJzTBn1n14!/r/dDQBAAAAAAAA) 实际上就相当于这样(把后面的串移到前面): ![](http://r.photo.store.qq.com/psb?/V11ZEfn31hRqZy/TggqPQYFRMN9*R8K03h6MP6KBTruZSB4WH*lRfAEQig!/r/dDYBAAAAAAAA) 所以这个串实际上可以看成一个环.(~~PPT是世界上最好的绘图软件!~~) 化环为链扫一遍就好了,注意答案对串的长度取min ``` #include <string> #include <iostream> #include <algorithm> using namespace std; string s; int main() { int i,ans,t; cin>>s; s+=s; ans=t=1; for (i=1;i<s.size();++i) { if (s[i]==s[i-1]) { t=1; } else { ++t; ans=max(ans,t); } } cout<<min(ans,int(s.size()/2)); return 0; } ```