题目链接:HDU 2932 Extraordinarily Tired Students
题意:给出N个学生的状态,(a,b,c)。a表示a分钟这醒着,b表示b分钟睡着,c表示刚开始是重周期(a+b)分钟的第c分钟开始。求第几分钟,所有的学生都没有睡觉。其中每个学生在睡觉前看一下是否睡觉的人数(包括他自己)比醒着的人数大,若是就睡觉,反之则不睡觉。
数据很小,暴力之,假设所有学生都没睡觉的时间不超过1000000,发现还可以更小。
AC代码;
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn=20;
int a[maxn],b[maxn],c[maxn];
int main()
{
int i,j;
int n,T,cas=1;
while(scanf("%d",&n)!=EOF,n)
{
for(i=0; i<n; i++)
scanf("%d %d %d",&a[i],&b[i],&c[i]);
for(i=0; i<100000; i++)
{
int cont=0;
for(j=0; j<n; j++)
{
T=a[j]+b[j];
if((i+c[j]-1)%T<a[j]) cont++;//醒;
else cont--;
}
if(cont>0)
break;
}
printf("Case %d: ",cas++);
if(i>=100000)
printf("-1\n");
else
{
int ans=-1;
for(j=0; j<n; j++)
{
T=a[j]+b[j];
if((i+c[j]-1)%T>=a[j])//醒;
ans=max(ans,T-(i+c[j]-1)%T);
}
printf("%d\n",i+ans+1);
}
}
return 0;
}