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