标签:usaco
n只有350,所以我们可以直接枚举每个点作为打断点,然后再统计其左右同颜色珠子的最大值,然后取这些最值中的最大值。
代码如下:
/*
ID: 15674811
LANG: C++
TASK: beads
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<fstream>
using namespace std;
int main()
{
ofstream fout("beads.out");
ifstream fin("beads.in");
char str[1000];
int len;
while(fin>>len)
{
fin>>str+1;
int ans=0;
for(int i=1;i<=len;i++)
{
int tmp=0;
int j=i,t=i;
char ch=str[j];
while(true)
{
if(str[j]==ch||str[j]==‘w‘)
{
tmp++;
j++;
if(j>len)
j-=len;
if(j==t)
break;
}
else if(str[j]!=ch)
{
if(ch==‘w‘)
{
tmp++;
ch=str[j];
j++;
if(j>len)
j-=len;
if(j==t)
break;
}
else
break;
}
}
j=(i-1)==0?len:i-1;
t=j; ch=str[j];
while(true)
{
if(str[j]==ch||str[j]==‘w‘)
{
tmp++;
j--;
if(j==0)
j=len;
if(j==t)
break;
}
else if(str[j]!=ch)
{
if(ch==‘w‘)
{
tmp++;
ch=str[j];
j--;
if(j==0)
j=len;
if(j==t)
break;
}
else
break;
}
}
if(tmp>len)
tmp=len;
ans=max(ans,tmp);
}
fout<<ans<<endl;
}
return 0;
}
标签:usaco
原文地址:http://blog.csdn.net/acm_lkl/article/details/44082203