/*ID: modengd1PROG: beadsLANG: C++*/#include#include #include using namespace std;int N;char input[355];int dp1[355],dp2[355];//dp1是以i为右端点的最长颜色相同的珠宝个数,dp2是以i为左端点的最长颜色相同的珠宝个数void slove(){ dp1[0]=1; int sumw; char flag; if(input[0]=='w') { sumw=1; flag='w'; } else { sumw=0; flag=input[0]; } bool iscicle=false; for(int i=1;i =N)//因为可能出现全串都颜色(只有白色和另外一种颜色)一样。 { cout< < =0;i--) { if(input[i%N]=='w') { sumw++; dp2[i%N]=dp2[(i+1)%N]+1; } else { if(flag=='w'||flag==input[i%N]) dp2[i%N]=dp2[(i+1)%N]+1; else dp2[i%N]=1+sumw; flag=input[i%N]; sumw=0;//白色清空 } if(dp1[i%N]>=N) { cout< < ans) { ans=dp1[i%N]+dp2[(i+1)%N]; } } //可能存在此串都能被收集的情况,此时会出现ans>N if(ans>N) ans=N; cout< <