admin管理员组文章数量:1530029
简单粗暴地判断不存在“全部都清醒的状态”
// uva12108.cpp
#include <stdio.h>
#include <string.h>
#define MAXN 12
// 1 for awaken state of students, 0 for sleep
struct student {
int a;
int b;
int c; // c for state
} students[MAXN];
bool AllAwaken(int n){
for (int stu = 0; stu < n; stu++)
if (students[stu].c > students[stu].a - 1) return false;
return true;
}
bool sleep_more_than_awaken(int n){
int awaken = 0, sleep = 0;
for (int stu = 0; stu < n; stu++)
if (students[stu].c <= students[stu].a - 1) awaken++;
else sleep++;
return sleep > awaken;
}
void sleep(int n){ // the sleeping students is more than awakening, all go to next state
for (int stu = 0; stu < n; stu++)
students[stu].c = (students[stu].c + 1) % (students[stu].a + students[stu].b);
}
void awaken(int n){
for (int stu = 0; stu < n; stu++)
if (students[stu].c == students[stu].a - 1) students[stu].c = 0;
else students[stu].c = (students[stu].c + 1) % (students[stu].a + students[stu].b);
}
int main(){
int n, kase = 0;
while (scanf("%d", &n) != EOF && n != 0){
for (int stu = 0; stu < n; stu++) {
scanf("%d%d%d", &students[stu].a, &students[stu].b, &students[stu].c);
students[stu].c --; // start from 0
}
int t = 1;
bool exist = true;
while ( !AllAwaken(n) ){
// debug
// for (int stu = 0; stu < n ; stu ++){
// printf("%d " , students[stu].c);
// }
// for(int stu = n - 1; stu >= 0; stu--){
// if (students[stu].c > students[stu].a - 1) printf("*");
// else printf(" ");
// }
// printf("\n");
if (sleep_more_than_awaken(n)) sleep(n);
else awaken(n);
t++;
if ( t > 100000) { exist = false; break;}
}
printf("Case %d: %d\n", ++kase, exist ? t : -1);
}
return 0;
}
本文标签: 学生ExtraordinaryStudentsTired
版权声明:本文标题:uva12108 特别困的学生 (Extraordinary Tired Students 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1725973784a1051109.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论