AOJ 1187: ICPC Ranking
問題
ICPC Ranking | Aizu Online Judge
- ICPCっぽいコンテストの提出履歴から順位を決定せよ
- 順位は、解いた問題数が多い順・解いた問題数が同じならかかった時間が短い順に決まる
- 異なる順位ならカンマ区切り、同順位なら=区切りで出力せよ
- 同順位ならチーム番号の大きい順に出力すること
方針
各チームのAC数と時間をクラスで保持しておいて<演算子をオーバーロード
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define rep(i, n) for(int i=0; i<(n); ++i) class team { public: int id, solve, time, miss[11]; bool operator<(const team & rhs) const{ if(solve > rhs.solve) return true; else if(solve==rhs.solve && time < rhs.time) return true; else if(solve==rhs.solve && time == rhs.time && id > rhs.id) return true; return false; } }; int main(void){ int M, T, P, R; int m, t, p, j; team teams[51]; while(cin >> M >> T >> P >> R && M) { rep(i, T) { teams[i].id = i+1; teams[i].solve = 0; teams[i].time = 0; rep(j, P+1) teams[i].miss[j] = 0; } rep(i, R) { cin >> m >> t >> p >> j; t--; if(j == 0) { teams[t].solve++; teams[t].time += m + teams[t].miss[p] * 20; } else { teams[t].miss[p]++; } } sort(teams, teams+T); rep(i, T-1) { cout << teams[i].id; if(teams[i].solve==teams[i+1].solve && teams[i].time==teams[i+1].time) { cout << "="; } else { cout << ","; } } cout << teams[T-1].id << endl; } }
http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=1893831