UVa 12108 - Extraordinarily Tired Students(模拟+细节处理)

来源:互联网 发布:新加坡 一带一路 知乎 编辑:程序博客网 时间:2024/05/16 11:28

输入每个学生的睡眠-清醒周期和当前状态,每个学生在睡觉前都会检查班里人的状态,仅当睡眠人数严格大于清醒人数时才会睡觉,否则继续保持清醒状态持续一个周期。求学生全部清醒的时刻,不存在则输出-1。

现在看来应该用数组记录状态判重来做这个题。当时用了一个循环上限,一旦达到上限还没全清醒即不存在。

建了两个函数,一个是让全体学生度过1分钟,另一个判定是否全部清醒。在判断一个学生是否睡觉时,一定要注意是严格大于。

#include<iostream>#include<cstring>#define maxn 15#define infinite 1e6using namespace std;int a[maxn],b[maxn],c[maxn];int n,cnt;void next_min(){    for(int i=0;i<n;i++)    {        c[i]%=a[i]+b[i];        if(c[i]==a[i]&&cnt>=n-cnt)//睡眠人数严格大于清醒人数才能睡觉。            c[i]=0;        c[i]++;    }    return;}bool all_awake(){    cnt=0;    for(int i=0;i<n;i++)        if(c[i]<=a[i])            cnt++;    if(cnt==n)//判断是否全部清醒。        return true;    else        return false;}int main(){    int t=1;    while(cin>>n&&n)    {        memset(a,0,sizeof(a));        memset(b,0,sizeof(b));        memset(c,0,sizeof(c));        for(int i=0;i<n;i++)            cin>>a[i]>>b[i]>>c[i];        int x;        for(x=1;x<infinite;x++)        {            if(all_awake())                break;            next_min();        }        if(x<infinite)//到上限就是不存在。            cout<<"Case "<<t<<": "<<x<<endl;        else            cout<<"Case "<<t<<": -1"<<endl;        t++;    }    return 0;}


0 0
原创粉丝点击