Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
弱弱地问一句用循环链表怎么超时了呢?被逼打表才AC的#include"stdio.h" #include"stdlib.h" struct Person { int a; bool b; struct Person *next; }; int main() { struct Person *p,*p1,*p2,person[50]; int i,j,k,sum1,sum2,n,flag; while(scanf("%d",&k)&&k)//0<k<14 { flag=1; for(i=0;i<2*k;i++) { if(i<k) person[i].a=1; else person[i].a=0; person[i].b=1; if(i!=2*k-1) person[i].next=&person[i+1]; else person[2*k-1].next=&person[0]; } for(n=k+1;flag;n++)//n为间距 { p=&person[0]; for(j=0;;j++) { for(i=0;i<n;) { if(p->b) i++; p1=p; p=p->next; } p=p1; p->b=0;//跳过n个没死的人 if(p->a&&!p->b) { p2=&person[0]; for(i=0;i<2*k;i++) { p2->b=1; p2=p2->next; }//全部重置为原来的值 break; }//如果好人死了,则n取下一位 p2=&person[0]; sum1=0; sum2=0; for(i=0;i<2*k;i++) { if(i<k) { sum1+=p2->b; p2=p2->next; } else { sum2+=p2->b; p2=p2->next; } } if(sum1==k&&!sum2) { printf("%d\n",n); flag=0; break; } p=p->next; } } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator