AOJ-ICPC 「審判は君だ!」
問題
You Are the Judge | Aizu Online Judge
解説
問題の方針は「ICPCの順位づけ」と変わりません。ほぼ同じ問題です。
gotutiyan.hatenablog.com
正解したかどうかのAC、不正解数のWA、ペナルティのtimをそれぞれ準備して、R個のデータについて格納していきます。
その後、AC_countの配列に結局各チームが何問正解したかどうかを格納します。
最後にpairを入れ子にした配列で、「問題数、ペナルティ、チーム番号」の順に入れて、一気に昇順ソートします。ここで、問題数は降順にソートしたいので、あらかじめマイナスをつけて入れておきます。
「ICPCの順位づけ」と異なるところは、同順位のときの扱い程度です。
#include <bits/stdc++.h> #define rep(i,j,k) for(int i=(int)j;i<(int)k;i++) #define itrep(i,x) for(auto i=(x).begin(); i!=(x).end();i++) #define Sort(x) sort((x).begin(),(x).end()) #define all(x) (x).begin(),(x).end() #define fi first #define se second #define vi vector<int> #define INF (int)1e9 #define INFL 1e18 #define MOD 1000000007 #define pb push_back #define MP make_pair #define PI 3.1415926535 typedef long long int ll; //typedef std::pair<int,int> P; int D=1; int dx[4]={0,1,0,-1},dy[4]={-1,0,1,0}; using namespace std; int main(){ int T,P,R; while(cin>>T>>P>>R && T){ vector<vector<int>> AC(T,vector<int>(P,0)),WA(T,vector<int>(P,0)); vector<int> tim(T,0); rep(i,0,R){ int t,p,timee; string s; cin>>t>>p>>timee>>s; t--; p--; if(s=="CORRECT"){ AC[t][p]++; tim[t]+=timee+WA[t][p]*1200; }else if(s=="WRONG"){ WA[t][p]++; } } vector<int> AC_count(T,0); rep(i,0,T){ rep(j,0,P){ if(AC[i][j])AC_count[i]++; } } vector<pair<int,pair<int,int>>> rank(T); rep(i,0,T)rank[i]=MP(-AC_count[i],MP(tim[i],i+1)); Sort(rank); rep(i,0,T){ cout<<rank[i].se.se<<" "<<-rank[i].fi<<" "<<rank[i].se.fi<<endl; } } return 0; }