小学期 比赛计分问题

在 ACM/ICPC 地区赛中,参赛队可以直接提交题目答案,但若答案错误,则再次提交时最后的成绩会受到影响。比赛的测试系统对每次提交的程序进行评判,结果是 AC 或者某种错误,参赛队能看到这个结果。

为了奖励优秀的队伍同时确定进军世界总决赛的资格名单,当两个队伍做出的题目数量相同时,会按照其使用的时间来进行进一步的排名。时间有两个部分,第一是总的解题时间,二是惩罚时间。所谓惩罚时间是指提交程序未通过时被罚的时间,每一次未通过的提交,都会在最终用于排名的时间中增加 20 分钟。对于没解决的题目不计时。

你的程序将读入一张运行结果清单,然后打印出前三名的成绩。

输入

输入文件包含若干测试数据集。

每个测试数据由两个部分组成,第一部分包含了一个正整数,它表示参赛队伍的个数。接下来的几行是每次提交的结果。每行表示一次提交的结果,包括提交时间、队伍编号、问题编号和裁定结果。

当一行中提交时间一项为 0 时,则表示当前的数据集结束。当参赛队伍的个数为 0 时,则表示全部输入的结束。

每个测试集中队伍的个数不超过 100 个,提交的次数不超过 10000 次。

输出

针对每一组输入,输出前三名的比分,包括队号、做出题数、比赛用时、名次。在输出排名前,要输出“case n”,其中 n 表示当前是第几组输入。

假设:可能有好几队在同一名次。比如如果有几队都是第三名,则将他们全部输出;如果有两队是第二名,则没有第三名。当队伍名次相同时,按照队伍编号从小到大输出。


测试用例1

扫描二维码关注公众号,回复: 1837630 查看本文章

测试输入:
3
12 1 2 yes
14 3 2 no
25 3 1 yes
29 1 1 no
38 3 2 yes
39 2 1 no
45 1 1 no
0
0
测试输出:
 
 
case 1:
3 2 83 1
1 1 12 2
2 0 0 3

题解:

本题是一个排序问题,把数据读入,并存入到struct中,然后对每个队伍进行排序,结构体多阶排序,使用qsort函数,ac题目数多的在前,ac题目数相同时,总用时少的在前,总用时又相同时,队伍号小的在前,这样排序好了之后一般输出前三个就好了,但是要考虑特殊情况,比如第一有两个,那么没有第二,再比如第二多个,则没有第三,第三有多个时,则第三全部输出,这就自己慢慢调代码吧!

ac代码:


猜你喜欢

转载自blog.csdn.net/silvester123/article/details/77916976