分析一下題目,首先可知分開的位置確定是在兩個不一樣的相鄰字母之間,可使用for語句求出每個能夠分開的位置處的可被收集的珠子數目,保存最大的那個數目,最後輸出便可。spa
/* ID: whutzha1 PROG: beads LANG: C++ */ #include<fstream> using namespace std; ifstream cin("beads.in"); ofstream cout("beads.out"); int main() { char arr[350]; int n,i,j; cin>>n; cin>>arr; int num,num1,num2,max=0; bool flag=true; for (i=0;i<n;i++) { num1=1;num2=1; if (arr[i%n]!=arr[(i+1)%n]) { flag=false; char a1=arr[i]; char a2=arr[i+1]; j=i-1; if (a1!='w') while(arr[(j+n)%n]==a1||arr[(j+n)%n]=='w') { num1++;j--; } else while(arr[(j+n)%n]=='w'||arr[(j+n)%n]!=a2) { num1++;j--; } j=i+2; if (a2!='w') while(arr[(j+n)%n]==a2||arr[(j+n)%n]=='w') { num2++;j++; } else while (arr[(j+n)%n]==a2||arr[(j+n)%n]!=a1) { num2++;j++; } num=num1+num2; if (max<num&&num<=n) max=num; } } if (flag) max=n; cout<<max<<endl; return 0; }