AOJ 1063 Watchin' TVA
問題
解法
実装するだけ。虫が入らないように丁寧に書くことが必要。
心臓に悪いコード
int N; int tominutes(int w, int s){ int h = s/100; int m = s%100; if(h >= 24){ h -= 24; w++; } return h*60+m+w*60*24; } int main(){ while(scanf("%d", &N) && N){ map<string, int>fm; vi fv, tv; int weekday, start; char name[64]; rep(i, N){ scanf("%s%d%d", name, &weekday, &start); int t = tominutes(weekday, start); fm[string(name)] = t; tv.PB(t); } int P; scanf("%d", &P); rep(i, P){ scanf("%s", name); fv.PB(fm[string(name)]); } int flag = 0; sort(fv.begin(), fv.end()); REP(i, 1, fv.size()){ if(fv[i] - fv[i-1] < 30) flag = 1; } sort(tv.begin(), tv.end()); rep(i, tv.size()) rep(j, fv.size()){ if(abs(tv[i]-fv[j]) < 30){ tv.erase(tv.begin()+i); i--; break; } } int res = tv.size(); int time = 0; rep(i, tv.size()){ if(tv[i] - time < 30){ res--; }else{ time = tv[i]; } } printf("%d\n", flag?-1:P+res); } return 0; }