您的位置:首页 > 其它

USACO之Section1.1.4 Broken Necklace

2017-05-28 18:24 435 查看
【题意】一串项链,仅有r,w,b三种颜色组成,从某个位置断开,在断开处分别向左向右取珠子,求最多取出多少个珠子?关键点:左右两边连续取同一种颜色的珠子;w可以视为任何色。

【输入】N

只包含r,w,b的字符串。

【输出】一个整数,表示最多取出的珠子数。

【分析】我用暴力分析每个断点,主要的容易错误的地方是:当断点是w时,要仔细的分析。

/*
ID:m1519591
PROG:beads
LANG:C++

*/
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
ofstream cout("beads.out");
ifstream cin("beads.in");

int n;
string str;
cin>>n>>str;
str+=str;

int fro,end;
int lef=0;
int rig=0;
int ans=0;

char fro0;
char end0;

int flag=1;

for(int i=0;i<=n-1;i++)
{
fro=i;
end=i+n-1;
lef=0;
rig=0;

for(int j=fro;j<=end;j++)
{
if(str[j]!='w'&&flag==1)  //flag标记是否是第一个访问的点,即是否是断点
{
fro0=str[j];  //记住断点的颜色

}

if(str[j]=='w'&&flag==1)  //断点是白色时,加到右端长度中
{
rig++;
}
else
{
flag=0;

if(str[j]!=fro0&&str[j]!='w')
break;
rig++;
}

}

flag=1;

for(int j=end;j>=fro;j--)
{
if(str[j]!='w'&&flag==1)
end0=str[j];

if(str[j]=='w'&&flag==1)
{
lef++;
}
else
{
flag=0;

if(str[j]!=end0&&str[j]!='w')
break;
lef++;
}
}

if(lef+rig>=n)
ans=n;
else
ans=max(ans,lef+rig);

}
cout<<ans<<endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: