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)