ぱーぽーの競プロ記

競技プログラミングに関することを書きます。

AOJ 2400 You Are the Judge

問題文はこちら↓
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2400


・概要
日本語なので省略。


・解法
やるだけです。

構造体に各チームのid、解いた問題数、ペナルティを持たせます。
あとはcorrect/wrongに応じて足したり掛けたりして、最後にソートして出力すればOKです。


ソースコード

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

#define rep(i,n) for(int i = 0 ; i < (int)(n) ; i++)

struct Score{
   int id, solve, penalty;
   
   bool operator < (Score s) const{
      if(penalty==s.penalty && solve==s.solve)return id < s.id;
      else if(solve==s.solve)return penalty < s.penalty;
      else return solve > s.solve;
   }
};

Score score[51];
int table[51][11];

void init(){
   memset(table,0,sizeof(table));
   
   rep(i,51){
       score[i].id = i+1;
       score[i].solve = 0;
       score[i].penalty  = 0;
   }
}

int main(){
   int T,P,R;
   while(cin >> T >> P >> R){
      if((T|P|R)==0)break;
      
      init();
      
      rep(i,R){
	 int t, p, time;
	 string m;
	 cin >> t >> p >> time >> m;
	 
	 if(m=="CORRECT"){
	    score[t-1].solve++;
	    score[t-1].penalty += time + 1200*table[t][p];
	 }
	 if(m=="WRONG")table[t][p]++;
      }

      sort(score, score+T);

      rep(i,T){
	 cout << score[i].id << " " << score[i].solve << " " << score[i].penalty << endl;
      }
   }
   return 0;
}