2017河南工业大学ACM邀请赛A题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017河南工业大学ACM邀请赛A题相关的知识,希望对你有一定的参考价值。
1260: 饶学妹的比赛
时间限制: 1 秒 内存限制: 64 MB提交: 334 解决: 102
提交 状态
题目描述
饶学妹组织了一场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
思路:
简单的模拟题。按时间顺序处理每个提交,有AC和WA之分。
AC:如果题目之前未被AC,则标记已经AC了,然后计算罚时;否则无视。
WA:如果题目之前未被AC,则记录一次WA;否则无视。
最后把每个选手按要求进行排序。
实现:
设计结构体进行存储,并重载其小于算符,以方便排序操作。
代码:
1 //1260 2 //2017-04-25 01:32:51 3 #include<bits/stdc++.h> 4 using namespace std; 5 #define clear(arr) memset((arr), 0, sizeof((arr))) 6 struct stu{ 7 int id, ac[12], pro[12], pass, t; 8 char name[25]; 9 stu(){ 10 pass = 0; 11 t = 0; 12 clear(ac); 13 clear(pro); 14 } 15 bool operator < (const stu &b) const{ 16 if(pass != b.pass) return pass > b.pass; 17 if(t != b.t) return t < b.t; 18 return id < b.id; 19 } 20 }; 21 22 int main(){ 23 int n, m, k; 24 while(scanf("%d%d%d", &n, &m, &k) == 3){ 25 stu *a = new stu[n+2]; 26 for(int i = 1; i <= n; i++){ 27 scanf("%s", a[i].name); 28 a[i].id = i; 29 } 30 while(m--){ 31 int t, id, pid; 32 char res[5]; 33 scanf("%d%d%d%s", &t, &id, &pid, res); 34 if(res[0] == ‘A‘){ 35 if(a[id].ac[pid] == 0){ 36 a[id].ac[pid] = 1; 37 a[id].pass++; 38 a[id].t += t + 20 * a[id].pro[pid]; 39 } 40 }else if(res[0] == ‘W‘){ 41 if(a[id].ac[pid] == 0) 42 a[id].pro[pid]++; 43 } 44 } 45 sort(a+1, a+n+1); 46 for(int i = 1; i <= n; i++) 47 printf("%s %d %d\n", a[i].name, a[i].pass, a[i].t); 48 delete a; 49 } 50 return 0; 51 }
以上是关于2017河南工业大学ACM邀请赛A题的主要内容,如果未能解决你的问题,请参考以下文章