Extraordinarily Tired Students UVA
阿新 • • 發佈:2018-12-20
#include <iostream> #include <string> #include <set> #define _for(i, a, b) for (int i = (a); i < (b); ++i) using namespace std; struct Stu { int A, B, C; } stus[15]; set<string> es; int n; void encode (string & ans) { ans.clear(); _for(i, 0, n) ans += (char)(stus[i].C + '0'); return; } bool action(int kase, int t) { string e; encode(e); if (es.count(e)) { cout << "Case " << kase << ": -1" << endl; return true; } es.insert(e); int wake = 0, sleep = 0; _for(i, 0, n) if (stus[i].C <= stus[i].A) wake++; sleep = n - wake; if (sleep == 0) { cout << "Case " << kase << ": " << t << endl; return true; } _for(i, 0, n) { Stu & s = stus[i]; s.C++; if (s.C == s.A + s.B + 1) s.C = 1; if (s.C == s.A + 1 && wake >= sleep) s.C = 1; } return false; } int main() { int k = 1; while (cin >> n && n) { es.clear(); _for(i, 0, n) cin >> stus[i].A >> stus[i].B >> stus[i].C; int t = 1; while (true) if (action(k, t++)) break; k++; } return 0; }