先上程序:
#include "stdio.h"
#include "stdlib.h"
typedef struct BEAD{
char color;
struct BEAD* prior;
struct BEAD* next;
}BEAD;
int main(void)
{
int n,i,num,num_b=0,i_p,i_n,flag=1;
char color_p='b';
BEAD *first,*goon,*before,*point,*check1,*check2;
scanf("%d",&n);
getchar();
first=(BEAD*) malloc(sizeof(BEAD));
first->color=getchar();
first->next=first;
first->prior=first;
point=before=first;
for (i=2; i<=n; i++,before=before->next) {
goon=(BEAD*)malloc(sizeof(BEAD));
goon->color=getchar();
goon->next=first;
goon->prior=before;
before->next=goon;
first->prior=goon;
}
for (i=0;i<=n; point=point->next,i++) {
if (point->color!='w')
color_p=point->color;
if ((point->next->color=='w')?0:(point->next->color!=color_p)) {
flag=0;
check2=check1=point;
for (i_p=0; (check1->color=='w')?1:check1->color==color_p; check1=check1->prior) {
i_p++;
}
for (i_n=0; (check2->next->color=='w')?1:check2->next->color!=color_p; check2=check2->next) {
i_n++;
}
num=i_p+i_n;
num_b=(num_b>num)?num_b:num;
}
}
free(first);
if ((flag==1)||(num_b>=n)) {
printf("%d\n",n);
}
else printf("%d\n",num_b);
return 0;
}
这个题目不同算法写了总共有3次,第一次,是只在r和b相连时开始计数,这样明显不行,网教里的一个非隐藏案例提醒了我
第二次,我没多想,干脆碰见不同的就判断计数,毫无疑问的TLE了
第三次,问了下大神,采用了上面的方法,程序比较紧凑,运行消耗时间也不大
不过,我在程序里多次使用了 ?: 运算符,应该要注意改进