加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

特别困的学生 UVa12108(模拟题)

发布时间:2020-12-14 03:20:01 所属栏目:大数据 来源:网络整理
导读:一、题目 课堂上有n个学生(n=10)。每个学生都有一个“睡眠-清醒”周期,其中第i个学生醒Ai分钟后睡Bi分钟,然后重复(1=Ai,Bi=5),初始第i个同学处于他的周期的Ci分钟。每个学生在临睡前,只有全班睡觉人数严格大于清醒人数才睡觉,否则坚持Ai分钟后再检查。问

一、题目

课堂上有n个学生(n<=10)。每个学生都有一个“睡眠-清醒”周期,其中第i个学生醒Ai分钟后睡Bi分钟,然后重复(1<=Ai,Bi<=5),初始第i个同学处于他的周期的Ci分钟。每个学生在临睡前,只有全班睡觉人数严格大于清醒人数才睡觉,否则坚持Ai分钟后再检查。问经过多长时间全班都清醒,不存在输出-1.

二、解题思路

重点在于体会Ci的含义,Ci表示第i个同学在自身周期内所处的状态。模拟整个过程,注意时间取长点,但不要太长。

三、代码

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<string.h>
 4 using  namespace std;
 5 #define INF  10000
 6 const int maxn = 10 + 5;
 7 int A[maxn],B[maxn],C[maxn];
 8 
 9 int main()
10 {
11     int n,T = 0;
12     while (scanf("%d",&n) == 1 && n)
13     {
14         for (int i = 0; i < n; i++)
15             scanf("%d%d%d",&A[i],&B[i],&C[i]);
16         int t;
17         for (t = 1; t < INF; t++)    //从1开始的
18         {
19             int  cnt = 0;            //cnt代表当前清醒的人数
20             for (int i = 0; i < n; i++)
21                 if (C[i] <= A[i])
22                     cnt++;
23             if (cnt == n)  break;
24 
25             for (int i = 0; i < n; i++)
26             {
27                 //C[i]表示处于周期的C[i]分钟,注意所处状态的变化
28                 if (C[i] == A[i] + B[i] || (C[i] == A[i] && cnt >= n - cnt))
29                     C[i] = 0;
30                 C[i]++;
31             }
32         }
33         if (t == INF) t = -1;
34         printf("Case %d: %dn",++T,t);
35     }
36     return 0;
37 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读