水题一遍A,不过要注意一下每个同学临睡前的情况,根据样例就能知道,好好研究样例即可。
#include<stdio.h>
#include<string.h>int a[15][10],n;
int b[20];
int main()
{
int T=1,i,j;
while(scanf("%d",&n)!=EOF&&n)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=0;i<n;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<n;i++){
if(a[i][2]>a[i][0])
b[i]=0;
else
b[i]=1;
}
int maxn=1,ans=0;
while(maxn<3000){
ans=1;
for(i=0;i<n;i++)
if(b[i]==0)
ans=0;
if(ans==1)
break;
for(i=0;i<n;i++){
if(a[i][2]==a[i][0]){
int d=0,c=0,ens=1;
for(j=0;j<n;j++){
if(b[j]==0)
d++;
else c++;
}
if(d<=c){
a[i][3]=1;
}
else
a[i][3]=3;
}
if(a[i][2]==a[i][0]+a[i][1]){
a[i][3]=2;
}
}
for(i=0;i<n;i++){
if(a[i][3]==1){
a[i][3]=0;
a[i][2]=0;
b[i]=1;
}
else if(a[i][3]==2){
a[i][3]=0;
a[i][2]=0;
b[i]=1;
}
else if(a[i][3]==3)
b[i]=0;
a[i][2]++;
}
maxn++;
}
printf("Case %d: ",T++);
if(ans!=1)
printf("%d\n",-1);
else
printf("%d\n",maxn);
}
return 0;
}