不要多想找规律,直接暴力模拟5000分钟,中间有都不睡的就返回,模拟完了还没有合适的直接返回-1.
AC代码:
#include <stdio.h>
#include <stdlib.h>
struct stu
{
int awa,sle,ing;
};
int judge(struct stu peo[],int slepnum,int n,int t)
{
if (t==5001) return -1;
int i;
for (i=0;i<n;i++)//更新下一分钟每位同学应该处于的状态
{
if (peo[i].ing==peo[i].awa&&slepnum<n/2+1)
peo[i].ing=1;
else
peo[i].ing++;
if (peo[i].ing > peo[i].awa+peo[i].sle)
peo[i].ing=1;
}
slepnum=0;
for (i=0;i<n;i++)//更新当前睡觉的人数
if (peo[i].ing>peo[i].awa)
slepnum++;
if (!slepnum) return t;
judge(peo,slepnum,n,++t);
}
int main()
{
struct stu peo[15];
int i,n,t=0;
while(scanf("%d",&n)&&n)
{
int slepnum=0; //当前睡觉的人数
for (i=0;i<n;i++)
{
scanf("%d%d%d",&peo[i].awa,&peo[i].sle,&peo[i].ing);
if (peo[i].ing>peo[i].awa)
slepnum++;
}
if (slepnum) printf("Case %d: %d\n",++t,judge(peo,slepnum,n,2));
else printf("Case %d: 1\n",++t);
}
return 0;
}