原题:http://cerberus.delos.com:790/usacoprob2?a=faHW39gatm8&S=beads
/*
ID: chicc991
PROG: beads
LANG: C++
*/
#include <fstream>
//#include <iostream>
using namespace std;
ifstream fin("beads.in");
ofstream fout("beads.out");
int n;//项链珠子数
char s[350];//代表珠子的数组
int bead();
int main()
{
fin>>n;
//cout<<n<<endl;
fin>>s;
fout<<bead()<<endl;
return 0;
}
int bead()
{
int b[n];
int max=0;
int x=0;//保存w的个数,全是w时跳出循环
for(int i=0; i<n; i++)
{
b[i]=s[i];
}
for(int i=0; i<n; i++)
{
int j=0;
int m=0;
int h=0;
int k=1;
if(i!=n-1)
m=i+1;
if(i!=0)
h=i-1;
else h=n;
//if((b[i]=='w')||(b[h]=='w')||(b[m]=='w'))
if(b[i]=='w')//全是w则跳出循环,否则结束本次循环
{
x++;
if(x==n)
{
max=n;
break;
}
continue;
}
while(b[i] != b[m])
{
if(m==n-1)
m=-1;
j++;
m++;
}
while((b[h]=='w')||(b[i] == b[h]))
{
if(h==0)
h=n;
k++;
h--;
if(k==n)//如果全是红珠子或者蓝珠子,结束循环
{
max=n;
break;
}
}
if(max<(j+k))
max=j+k;
if(max>n)//有可能算了2次白珠子,个数最多为总珠子数量
max=n;
//cout<<i<<" "<<"j="<<j<<" "<<"k="<<k<<endl;
}
return max;
}
注意全是白珠子,全是红珠子,以及连续红蓝珠子串中白珠子被重复计算等特殊情况。