题目很简单,代码也挺丑的,为了偷懒没有把两个循环写在一起。
过两天优化一下。
不过还是很开心。
/* ID:twoutop1 LANG: C++ TASK: beads */ #include <iostream> #include <cstdio> #include <string> #include <cstring> using namespace std; string b; int sum1[1000],sum2[1000],m,sums,maxn=-1000000,N; char t; int main(){ cin>>N>>b; const int len=b.length(); //cout<<len<<endl; b=b+b; for(int i=0;i<len;i++){ for(int j=i;j<i+len;j++){ if(b[i]!='w'){ if(b[j]==b[i]) sum1[i]++; if(b[j]=='w') sum1[i]++; if(b[j]!=b[i]&&b[j]!='w') break; } else { if(b[j]=='w') sum1[i]++; else{ if(m!=1){ if(b[j]=='r') t='r'; else t='b'; m=1; }} if(b[j]==t) sum1[i]++; if(b[j]!=t&&b[j]!='w') break; } } m=0; //cout<<sum1[i]<<" "; } //cout<<endl; for(int i=len-1;i<2*len-1;i++){ for(int j=i;j>0;j--){ if(b[i]!='w'){ if(b[j]==b[i]) sum2[i]++; if(b[j]=='w') sum2[i]++; if(b[j]!=b[i]&&b[j]!='w') break; } else { if(b[j]=='w') sum2[i]++; else{ if(m!=1){ if(b[j]=='r') t='r'; else t='b'; m=1; }} if(b[j]==t) sum2[i]++; if(b[j]!=t&&b[j]!='w') break; } } m=0; //cout<<sum2[i]<<" "; } //cout<<endl; //cout<<len<<endl; for(int s=0;s<len;s++){ sums=sum1[s]+sum2[len-1+s]; maxn=sums>maxn?sums:maxn; //cout<<maxn<<" "; } if(maxn>len) maxn=len; //cout<<len<<endl; cout<<maxn<<endl; return 0; }