概述
链接http://codeforces.com/contest/1025/problem/C
在由w和b组成的字符串中切一刀,两段各自逆序,然和拼接,要求最后w和b轮流出现的最长子段的长度。这个操作有一个很特殊的性质。先考虑字符串“1234|54321”在‘|’处切开,然后逆序之后的新字符串是“4321|12345”。想象将字符串的两段连起来组成一个环,可以发现字符串的相对顺序没变,原字符串顺时针和后字符串的逆时针是一样的,所以只要在字符串中找到最长的符合要求的子段即可。
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<string> #include<vector> #define DEBUG(x) cout<<#x<<" = "<<x<<endl using namespace std; const int MAXN=1e5+10; char s[MAXN]; int main() { // freopen("in.txt","r",stdin); scanf("%s",s); int l=strlen(s); bool w=s[0]=='w'; int ans=-1; int cnt=0; int k=0; while(1){ int i=k%l; if(w^(s[i]=='w')){ ans=max(ans,cnt); if(k>=l)break; cnt=0; w=s[i]=='w'; ///if(s[i]=='b')k++; } else { cnt++; w^=1; k++; } if(k==2*l){ans=cnt/2;break;} } printf("%dn",ans); }
转载于:https://www.cnblogs.com/MalcolmMeng/p/9536620.html
最后
以上就是孤独猫咪为你收集整理的codeforces 1025C Plasticine zebra的全部内容,希望文章能够帮你解决codeforces 1025C Plasticine zebra所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复