1.1 Broken Necklace

       分析一下题目,首先可知分开的位置肯定是在两个不同的相邻字母之间,可以使用for语句求出每一个可以分开的位置处的可被收集的珠子数目,保存最大的那个数目,最后输出即可。

 

/*
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;
}

你可能感兴趣的:(USACO)