AOJ 0100 Sale Result
#include <cstdio> #include <vector> using namespace std; int main() { long long n; while(scanf("%Ld\n", &n), n){ vector<pair<long long, long long> > v; for(long long i = 0; i < n; i++){ long long p, q, r, f = 1; scanf("%Ld %Ld %Ld\n", &p, &q, &r); for(long long j = 0; j < v.size(); j++){ if(v[j].first == p){ f = 0; v[j].second += q * r; } } if(f){ pair<long long, long long> pa(p, q * r); v.push_back(pa); } } long long g = 1; for(long long i = 0; i < v.size(); i++){ if(1000000 <= v[i].second){ g = 0; printf("%Ld\n", v[i].first); } } if(g) puts("NA"); } return 0; }
悪意に満ちた問題。正答率は脅威の13%。
何が起こっているかというと、まず問題文の「社員番号は重複しないものとします」という一文が死刑モンで、テストケースを見れば分かるが、つまりこれは「入力において社員番号が重複しない」の意ではなく、「入力においては重複し得るが、出力において重複してはいけない」の意。
そうすると、「入力した順番に従って出力」の一文がいかに面倒臭さをアップさせているかも分かる。
そして値もやたらデカい。普通にintとかしていたのでは通らない。キレたので正規表現で全部intをlong longにしたら幸せになった。