#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<bool> students,temp;//1代表睡觉
vector<int> Avector,Bvector,Cvector;
bool initial()
{
int n;
cin>>n;
if(!n)
return 0;
else
{
for(int i=0;i<n;i++)
{
students.push_back(0);
temp.push_back(0);
int A,B,C;
cin>>A>>B>>C;
Avector.push_back(A);
Bvector.push_back(B);
Cvector.push_back(C);
}
return 1;
}
}
int main()
{
int times=1;
while(initial())
{
vector<int> CvectorBegin=Cvector;
int t=1;
for(int i=0;i<students.size();i++)
{
students[i]=(Cvector[i]>Avector[i]);
}
t++;
temp=students;
while(1)
{
if(t>2&&CvectorBegin==Cvector)
{
cout<<"Case "<<times<<": "<<-1<<endl;
break;
}
bool allAwake=1;
for(int i=0;i<students.size();i++)
{
if(students[i]==1)
{
allAwake=0;
break;
}
}
if(allAwake==1)
{
cout<<"Case "<<times<<": "<<t-1<<endl;
break;
}
int number=0;
for(int j=0;j<students.size();j++)
{
if(students[j]==1)
number++;
}
for(int i=0;i<students.size();i++)
{
if(students[i]==1)//检查睡着的人是否要醒
{
if((Cvector[i]+1)>(Avector[i]+Bvector[i]))
Cvector[i]=(Cvector[i]+1)%(Avector[i]+Bvector[i]);
else Cvector[i]++;
if(Cvector[i]<=Avector[i])
temp[i]=0;//先保存到副本中,这一天结束以后再复制这个变动
}
else if(students[i]==0)//检查醒着的人是否要睡
{
if((Cvector[i]+1)>(Avector[i]+Bvector[i]))
Cvector[i]=(Cvector[i]+1)%(Avector[i]+Bvector[i]);
else
Cvector[i]++;
if(Cvector[i]>Avector[i]&&number>(students.size()/2))
{
temp[i]=1;
}
else if(Cvector[i]>Avector[i]&&number<=(students.size()/2))
{
temp[i]=0;
Cvector[i]=0;
}
}
}
students=temp;
t++;
}
students.clear();
temp.clear();
Avector.clear();
Bvector.clear();
Cvector.clear();
times++;
}
return 0;
}
时间类的问题有的时候需要调试一下才能明白具体的过程。
习题 4-8 特别困的学生 uva12108
最新推荐文章于 2022-02-02 23:05:39 发布