数据结构——编程珠玑

来源:互联网 发布:无所事事 知乎 编辑:程序博客网 时间:2024/06/06 17:29

 先上程序:

#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了

第三次,问了下大神,采用了上面的方法,程序比较紧凑,运行消耗时间也不大

  不过,我在程序里多次使用了 ?: 运算符,应该要注意改进

原创粉丝点击