任务三:
前面的任务你应该没问题吧,第三个任务是非常重要的,希望你能认真完成。排名系统,是OJ的核心功能啦,如果这个不会做的话,可有点严重了。
排名系统是根据ICPC规则对参赛队排名的成绩,进行排序。
提交数据有n条,每条记录有四个值,分别是 用户名、题号、通过与否、提交时间。
输出根据排行榜规则输出排行榜。规则同ICPC排名规则。
输入多组数据。每组数据格式如下:
第一行是两个整数n(1<=n<=100000),m(1<=m<=20),分别表示提交数量和题目总数。
接下来是n行,每行表示一个提交。
提交数据格式:
username pid result time
username是一个长度不超过15的字符串,是唯一标示,username相同的提交数据是同一个用户提交的。
pid是一个数字,从1开始。
result是一个数字,0标示提交未通过,1标示通过。
time是一个数字,表示这个提交是在距离比赛开始时间time秒提交的。输入保证一秒内最多只有一个提交。
注意:提交数据的顺序是错乱的。
每组数据先输出“Case #x:”,x表示当前测试数据的组数。
接下来是多行,行数是所有有提交记录的用户。每行有m+4列,用一个空格分隔。
每行格式:
第一列是用户的排名,是一个数字,从1开始递增。
第二列是用户名。
第三列是这个用户解决的题目数。
第四列是这个用户的罚时,罚时=通过的题目的时间总和+通过题目的总错误次数*20。
并且如果某个错误的提交是在通过这题之后,则不计算入错误次数。
接下来的m列是每道题的提交情况。
如果这题通过,则用x(-y)表示,x表示当前题目第一次通过的时间,y表示通过这题之前的错误的次数。
如果这题未提交过,则用0表示。
如果这题提交了但是未通过,则用-y表示,x表示当前题目的错误次数
排名规则:用户解决题目的数量多的排名靠前。
解决题目数量相同的,罚时短的排名靠前。
罚时相同的,根据用户名的字典序,字典序小的靠前。
6 2 admin 1 1 360 admin 2 1 1000 syiml 1 0 350 syiml 1 1 600 syiml 1 0 601 syiml 1 1 602
Case #1: 1 admin 2 1360 360(-0) 1000(-0) 2 syiml 1 620 600(-1) 0