Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

弱弱地问一句用循环链表怎么超时了呢?被逼打表才AC的

Posted by yjm19911124 at 2012-11-28 12:32:11 on Problem 1012
#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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator