我以后会好好写的
/*
ID: 13913351
LANG: C++
PROG: beads
*/
#include<iostream>
#include<fstream>
#include<cstring>
#define cin fin
#define cout fout
using namespace std;
char inputfile[20]="beads.in";
char outfile[20]="beads.out";
ifstream fin(inputfile);
ofstream fout(outfile);
const int size=360*2;
char s[size];
int tail[size]; //tail[i]表示以s[i]为结尾的最长珠串的长度
int head[size];//head[i]表示以s[i]为结尾的最长珠串的长度
int w[size];
int ans=0;
char cur;//计算过程中当前截取珠串的的颜色
int main()
{
int n;
cin>>n;
cin>>s;
int i; //本身珠串是没有端点的,但字符串表示时有端点的,所以字符串端点处需要特殊考虑
for(i=n;i<2*n-1;i++)//在珠串尾部接入同样的珠串,就可以不用考虑端点处的特殊情况。
{
s[i]=s[i-n];
}
//处理tail
if(s[0]=='w')w[0]=1; //w[i]表示截止到i一共有多少连续的白色珠串,从前往后
else w[0]=0;
tail[0]=1;
cur=s[0];
int tag=0;
for(i=1;i<2*n-1;i++)
{
if(s[i]=='w')
{
w[i]=w[i-1]+1;
}
else w[i]=0;
if(cur=='w')
{
tail[i]=tail[i-1]+1;
cur=s[i];
}
else
{
if(s[i]==cur||s[i]=='w')
{
tail[i]=tail[i-1]+1;
}
else
{
tail[i]=w[i-1]+1;
cur=s[i];
}
}
}
//处理head
if(s[2*n-1]=='w')w[2*n-1]=1;//w[i]表示截止到i一共有多少连续的白色珠串,从后往前
else w[2*n-1]=0;
head[2*n-1]=1;
cur=s[2*n-1];
for(i=2*n-2;i>=0;i--)
{
if(s[i]=='w')
{
w[i]=w[i+1]+1;
}
else w[i]=0;
if(cur=='w')
{
head[i]=head[i+1]+1;
cur=s[i];
}
else
{
if(s[i]==cur||s[i]=='w')
{
head[i]=head[i+1]+1;
}
else
{
head[i]=w[i+1]+1;
cur=s[i];
}
}
}
int ans=0;
for(i=0;i<n;i++)
{
ans=max(ans,tail[i]+head[i+1]);
}
cout<<min(ans,n)<<endl;//当珠串为“rrr”类型时,ans>n,显然是错误的。
return 0;
}