「aoj2400~2410」の編集履歴(バックアップ)一覧に戻る

aoj2400~2410 - (2012/07/03 (火) 21:16:04) の編集履歴(バックアップ)


2400 You Are the Judge


なにやら知らないうちに2400番台の問題が追加されていた。
もちろん記念すべき1問目は伝統にのっとり肩慣らしの簡単問題である。
こんな簡単な問題でコード実行速度差が出てくるというのが何とも不思議である。
どうやったらこの問題を遅く実行できるのか想像がつかない。


#include <stdio.h>
#include <algorithm>
#include <vector>
struct team{
int a,b[11],no,p;//正答数、誤答数
bool operator<(const team& t)const{
	if(a!=t.a)return a>t.a;
	if(p!=t.p)return p<t.p;
	return no<t.no;
}
team(){
	for(int i=0;i<11;i++)b[i]=0;
	a=p=0;
}
};
void calc(int t,int p,int r){
std::vector<team> teams;
team t1;
for(int i=0;i<t;i++){
	t1.no=i+1;
	teams.push_back(t1);
}
int tID,pID,time;
char com[20];
for(int i=0;i<r;i++){
	scanf("%d %d %d %s",&tID,&pID,&time,com);
	tID--;
	if(com[0]=='C'){
		teams[tID].a++;
		teams[tID].p+=1200*teams[tID].b[pID]+time;
	}else{
		teams[tID].b[pID]++;
	}
}
std::sort(teams.begin(),teams.end());	
for(int i=0;i<t;i++){
	printf("%d %d %d\n",teams[i].no,teams[i].a,teams[i].p);
}
}
int main(){
int t,p,r;
while(1){
	scanf("%d %d %d",&t,&p,&r);
	if(t==0&&p==0&&r==0)break;
	calc(t,p,r);
}
}