题目 :https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3260
每个学生单独计时,当时间等于周期时或者学生想睡觉时发现睡觉觉的学生不多于醒着的学生时重新计时。直到所有的学生都醒。
#include <stdio.h>
#define N 20
struct student
{
int awake,sleep,start,flag=0;
} cmd[N];
int main ()
{
int a;
int time = 0;
while(scanf("%d",&a)!=EOF)
{
if(!a)
{
return 0;
}
int slp=0,swk=0;
for(int i=0; i<a; i++)
{
scanf("%d%d%d",&cmd[i].awake,&cmd[i].sleep,&cmd[i].start);
if(cmd[i].awake>=cmd[i].start)
{
swk++;
}
}
int sum=0;
int i;
for( i=0; i<10000; i++)
{
swk=0;
for(int i=0; i<a; i++)
{
if(cmd[i].awake>=cmd[i].start)
{
swk++;
}
}
if(swk==a)
{
break;
}
for(int j=0; j<a; j++)
{
if(cmd[j].awake+cmd[j].sleep==cmd[j].start||(cmd[j].awake==cmd[j].start&&swk>=a-swk))
{
cmd[j].start=0;
}
cmd[j].start++;
}
}
int t;
if(i==10000) printf("Case %d: -1\n",++time);
else printf("Case %d: %d\n",++time,i+1);
}
return 0;
}