#include<fstream>
#include<iostream>
#include<malloc.h>
#define null NULL
using namespace std;
typedef struct list
{
char value;
struct list * prior;
struct list * next;
}list;
int main()
{
ifstream fin ("beads.in");
ofstream fout ("beads.out");
int n,i;
list * p;
list * head;
fin>>n;
for(i=0;i<n;i++)
{
if(i==0)
{
head=(list *)(malloc(sizeof(list)));
head->next=null;
head->prior=null;
fin>>head->value;
p=head;
}
else
{
list * q=(list *)(malloc(sizeof(list)));
fin>>q->value;
p->next=q;
q->prior=p;
p=q;
}
}
p->next=head;
head->prior=p;
list *q=head;
list *t=head->next;
int sum=0,sum1=0,sum2=0,sumtemp=0;
for(i=0;i<n;i++)
{
list * qt=q;
list * tt=t;
sum1=1;
sum2=1;
if(qt->value=='r' || qt->value=='b')
while((qt->prior->value==q->value || qt->prior->value=='w')&&(qt->prior!=tt))
{
qt=qt->prior;
sum1++;
}
else if(qt->value=='w')
{
int sumr=0,sumb=0;
while((qt->prior->value=='r' || qt->prior->value=='w')&&(qt->prior!=tt))
{
sumr++;
qt=qt->prior;
}
list *qt1=q;
while((qt1->prior->value=='b' || qt1->prior->value=='w')&&(qt1->prior!=tt))
{
sumb++;
qt1=qt1->prior;
}
if(sumr>=sumb)
sum1+=sumr;
else
{
sum1+=sumb;
qt=qt1;
}
}
if(tt->value=='r' || tt->value=='b')
{
while((tt->next->value==t->value || tt->next->value=='w')&&(qt!=tt->next))
{
tt=tt->next;
sum2++;
}
}
else if(tt->value=='w')
{
int sumr=0,sumb=0;
while((tt->next->value=='r' || tt->next->value=='w')&&(qt!=tt->next))
{
sumr++;
tt=tt->next;
}
list * tt1=tt;
while((tt1->next->value=='b' || tt1->next->value=='w')&&(qt!=tt1->next))
{
sumb++;
tt1=tt1->next;
}
if(sumr>=sumb)
sum2+=sumr;
else
{
sum2+=sumb;
tt=tt1;
}
}
sumtemp=sum1+sum2;
if(sumtemp>sum)
sum=sumtemp;
sum1=0;
sum2=0;
q=q->next;
t=t->next;
}
fout<<sum<<endl;
return 0;
}
broken necklace
最新推荐文章于 2017-11-14 16:54:24 发布