题目传送门:http://218.28.220.249:50015/JudgeOnline/problem.php?id=1260
1260: 饶学妹的比赛
时间限制: 1 秒 内存限制: 64 MB提交: 363 解决: 116
提交 状态
题目描述
饶学妹组织了一场ACM赛制的比赛,大家纷纷慕名来参加。比赛中大家交题只会有两种结果:AC,WA。比赛结束了,饶学妹制作榜单啦。首先按AC题目的数目(重复AC一道题只算一次)从多到少排名;AC题目数目相同的同学按罚时(罚时计算方式为:单题罚时 = (首次AC该题目时间 + 首次AC之前WA的次数 * 20) min,总罚时 = 各题罚时之和;即某题目AC之后,对这道题目后续的提交均不计入罚时)从少到多排列;AC数目相同且罚时也相同的同学,按编号从小往大排序。
输入
第一行为n,m,k(1≤n≤1000,1≤m≤10000,1≤k≤10),分别表示参加比赛的人数、提交总次数和总题数。
之后一行为n个用空格分隔的字符串,表示n位参赛选手的姓名(每个字符串长度均不超过20,且仅含小写字母);
之后m行,每行均为 Timei IDi PIDi Resulti,(1≤Timei≤Timei+1≤300,1≤IDi≤n,1≤PIDi≤k,Resulti="AC"/"WA"),表示编号为IDi的选手在Timei时刻提交了编号为PIDi的题目,且结果为Resulti.
输出
输出n行,按排名从高到低排列。每行分别输出该选手的姓名,过题数,总罚时,中间均为一个空格间隔。
样例输入
5 11 10 phx lsf zk rqy ch 1 1 1 AC 1 1 2 AC 2 1 3 AC 2 1 4 AC 3 2 2 WA 4 2 2 AC 5 3 2 AC 10 5 1 WA 20 5 2 WA 30 5 3 WA 40 5 4 WA
样例输出
phx 4 6 zk 1 5 lsf 1 24 rqy 0 0 ch 0 0
比赛的时候死活没有交过去,一直RE,连个WA都不给我,,,后来今天突然发现,,,是我的sort写错了,,崩溃
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 struct A{ 6 char na[22]; 7 int ac[20],wa[20],time,bian,acti; 8 }; 9 bool cmp(A a,A b) 10 { 11 if(a.acti==b.acti) 12 { 13 if(a.time==b.time) 14 return a.bian<b.bian; 15 return a.time<b.time; 16 } 17 return a.acti>b.acti; 18 } 19 int main() 20 { 21 int n,m,k,i,j,a,b,c; 22 char d[10]; 23 struct A r[1100]; 24 while(scanf("%d%d%d",&n,&m,&k)!=EOF) 25 { 26 27 memset(r,0,sizeof(r)); 28 getchar(); 29 for(i=1;i<=n;i++) 30 { 31 scanf("%s",r[i].na); 32 r[i].bian=i; 33 } 34 35 36 for(i=0;i<m;i++) 37 { 38 scanf("%d%d%d %s",&a,&b,&c,d); 39 if(strcmp(d,"AC")==0&&r[b].ac[c]==0) 40 { 41 r[b].ac[c]=1; 42 r[b].acti++; 43 if(r[b].wa[c]!=0) 44 { 45 r[b].time+=r[b].wa[c]*20+a; 46 } 47 else 48 r[b].time+=a; 49 } 50 else 51 { 52 r[b].wa[c]++; 53 } 54 } 55 sort(r+1,r+n+1,cmp); 56 for(i=1;i<=n;i++) 57 { 58 printf("%s %d %d ",r[i].na,r[i].acti,r[i].time); 59 } 60 61 } 62 return 0; 63 }