UVa 12108 特别困的学生

Posted 谦谦君子,陌上其华

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 12108 特别困的学生相关的知识,希望对你有一定的参考价值。

https://vjudge.net/problem/UVA-12108

题意:给出n个学生的“清醒—睡眠”周期和初始时间点,每个学生在睡眠时需要判断全班睡觉人数是否严格大于清醒人数,否则在坚持一个清醒周期后再次判断。求出多长时间时全班都是清醒状态。

思路:水题吧。一次次的枚举下去,循环终止的条件就是和初始状态相同。

 1 #include<iostream>
 2 using namespace std;
 3 
 4 struct Node
 5 {
 6     int A;
 7     int B;
 8     int C;
 9 }stu[12];
10 int ans[12];
11 
12 int main()
13 {
14     //freopen("D:\\txt.txt", "r", stdin);
15     int n,sleep,kase=0;
16     while (cin >> n && n)
17     {
18         sleep = 0;
19         for (int i = 0; i < n; i++)
20         {
21             cin >> stu[i].A >> stu[i].B >> stu[i].C;
22             ans[i] = stu[i].C;
23             if (stu[i].C>stu[i].A) sleep++;    //统计初始睡着人数
24         }
25         int count = 0;
26         for (int k=1;;k++)
27         {
28 
29             if (sleep == 0)
30             {
31                 cout << "Case " << ++kase << ": " << k << endl;
32                 break;
33             }
34 
35             if (count == n)
36             {
37                 cout << "Case " << ++kase << ": -1" << endl;
38                 break;
39             }
40 
41             count = 0;
42             int flag = 0;
43 
44             for (int i = 0; i < n; i++)
45             {
46                 ans[i] = ans[i] % (stu[i].A + stu[i].B)+1;
47                 if (ans[i] == 1)   flag--;
48                 if (ans[i] == stu[i].A + 1)
49                 {
50                     if (sleep <= n - sleep)
51                         ans[i] = 1;
52                     else flag++;
53                 }
54                 if (ans[i] == stu[i].C)  count++;
55             }
56             sleep += flag;
57         }
58     }
59     return 0;
60 }

 

以上是关于UVa 12108 特别困的学生的主要内容,如果未能解决你的问题,请参考以下文章

UVA 12108 Extraordinarily Tired Students

UVA 12108 Extraordinarily Tired Students

习题 4-8 UVA - 12108Extraordinarily Tired Students

交换学生 (Foreign Exchange,UVa10763)

UVa10035 小学生算数(Primary Arithmetic)

部分代码片段