您的位置:首页 > 编程语言 > C语言/C++

usaco/ 1.1 Broken Necklace

2013-06-03 20:53 399 查看
原题: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
;
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++;
4000

}

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


注意全是白珠子,全是红珠子,以及连续红蓝珠子串中白珠子被重复计算等特殊情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ usaco