#35853. 考试排名
考试排名
暂无测试数据。
C++ 编程考试使用的实时提交系统,具有即时获得成绩排名的特点。它的功能是怎么实现的呢?
我们做好了题目的解答,提交之后,要么正确通过,要么错误,不管怎样错法,总是给你记上一笔,表明你曾经有过一次错误提交,因而当你一旦提交该题 正确通过后,就要与你算一算帐了,总共该题错误提交了几回。虽然你在题数上,大步地跃上了一个台阶,但是在耗时上要摊上你共花去的时间。特别是,曾经有过的错误提交,每次都要摊上一定的单位时间分。这样一来,你在做出的题数上,可能领先别人很多,但是,在做出同样题数的人群中,你可能会在耗时上处于排名的劣势。
例如:某次考试一共 $8$ 题(A,B,C,D,E,F,G,H),每个人做的题都在对应的题号下有个数量标记,如果是负数表示该学生在该题上有过的错误提交次数,但到现在还没有正确通过;如果是正数表示正确通过所耗的时间,如果正数 $a$ 跟上一对括号,里面有个整数 $b$,那就表示该学生提交该题正确通过了,耗去了时间 $a$,同时,曾经错误提交了 $b$ 次;如果是 $0$ 表示没有提交过。因此对于下述记录:
名字 | A | B | C | D | E | F | G | H |
---|---|---|---|---|---|---|---|---|
Smith | -1 | -16 | 8 | 0 | 0 | 120 | 39 | 0 |
John | 116 | -2 | 11 | 0 | 0 | 82 | 55(1) | 0 |
Jose | 72(3) | 126 | 10 | -3 | 0 | 47 | 21(2) | -2 |
Bush | 0 | -1 | -8 | 0 | 0 | 0 | 0 | 0 |
Alice | -2 | 67(2) | 13 | -1 | 0 | 133 | 79(1) | -1 |
Bob | 0 | 0 | 57(5) | 0 | 0 | 168 | -7 | 0 |
若每一道正确通过的题目罚时为耗时 + 错误次数 $\times 20$ 分钟,则其排名从高到低应该是这样的:
排名 | 名字 | 题数 | 罚时 |
---|---|---|---|
1 | Jose | 5 | 376 |
2 | John | 4 | 284 |
3 | Alice | 4 | 352 |
4 | Smith | 3 | 167 |
5 | Bob | 2 | 325 |
6 | Bush | 0 | 0 |
实际上排名规则如下,先按正确题数的多少排,多的在前,再按罚时的多少排,少的在前,如果凑巧前两者都相等,则按名字的字典序排,小的在前。
输入格式
第一行是考试题数 $n(1 \le n \le 20)$ 和学生人数 $m(1 \le m \le 1000)$。
接下来 $m$ 行,每行输入一个学生的考试信息,先输入一个不包含空格的字符串表示学生名字,接下来按照题目描述格式依次输入 $n$ 个题目的做题情况,所有数据之间用一个空格隔开。
保证输入的所有数的绝对值小于等于 $300$,名字只包含大小字母且长度不大于 $20$。
输出格式
输出一共 $m$ 行,从高到低依次输出每个学生的成绩,排名规则如题目描述所示。每行描述一个学生成绩,包含学生名字,正确通过题数和总罚时,中间用一个空格隔开。
8 6
Smith -1 -16 8 0 0 120 39 0
John 116 -2 11 0 0 82 55(1) 0
Jose 72(3) 126 10 -3 0 47 21(2) -2
Bush 0 -1 -8 0 0 0 0 0
Alice -2 67(2) 13 -1 0 133 79(1) -1
Bob 0 0 57(5) 0 0 168 -7 0 -7 0
Jose 5 376
John 4 284
Alice 4 352
Smith 3 167
Bob 2 325
Bush 0 0