【AOJ 1187】ICPC Ranking
問題
ICPC Ranking | Aizu Online Judge
ソースコード
#include <algorithm> #include <iostream> #include <cstring> using namespace std; #define rep(i,n) REP(i,0,n) #define REP(i,a,n) for(int i = a ; i < n ; i++) #define T_MAX 50 struct SCORE{ int id; int ac; int penalty; bool operator < (const SCORE& another) const{ if(ac == another.ac){ if(penalty == another.penalty){ return id > another.id; }else{ return penalty < another.penalty; } }else{ return ac > another.ac; } } }; SCORE s[T_MAX]; int submit[T_MAX+1][T_MAX+1]; void init(int t){ rep(i,t){ s[i].id = i+1; s[i].ac = s[i].penalty = 0; } memset(submit, 0, sizeof(submit)); return; } int main(){ int m, t, p, r; while(cin >> m >> t >> p >> r, m){ init(t); rep(i,r){ int m_i, t_i, p_i, j_i; cin >> m_i >> t_i >> p_i >> j_i; if(j_i != 0){ submit[t_i][p_i]++; }else{ s[t_i-1].ac++; s[t_i-1].penalty += (m_i + submit[t_i][p_i] * 20); } } sort(s, s+t); cout << s[0].id; SCORE prev; REP(i,1,t){ prev = s[i-1]; if(s[i].ac == prev.ac && s[i].penalty == prev.penalty){ cout << "="; }else{ cout << ","; } cout << s[i].id; } cout << '\n'; } }
似たような問題(You Are the Judge | Aizu Online Judge)を以前に解いたので、同じような方針で実装した。