#35853. 考试排名

考试排名

暂无测试数据。

C++ 编程考试使用的实时提交系统,具有即时获得成绩排名的特点。它的功能是怎么实现的呢?

我们做好了题目的解答,提交之后,要么正确通过,要么错误,不管怎样错法,总是给你记上一笔,表明你曾经有过一次错误提交,因而当你一旦提交该题 正确通过后,就要与你算一算帐了,总共该题错误提交了几回。虽然你在题数上,大步地跃上了一个台阶,但是在耗时上要摊上你共花去的时间。特别是,曾经有过的错误提交,每次都要摊上一定的单位时间分。这样一来,你在做出的题数上,可能领先别人很多,但是,在做出同样题数的人群中,你可能会在耗时上处于排名的劣势。

例如:某次考试一共 $8$ 题(A,B,C,D,E,F,G,H),每个人做的题都在对应的题号下有个数量标记,如果是负数表示该学生在该题上有过的错误提交次数,但到现在还没有正确通过;如果是正数表示正确通过所耗的时间,如果正数 $a$ 跟上一对括号,里面有个整数 $b$,那就表示该学生提交该题正确通过了,耗去了时间 $a$,同时,曾经错误提交了 $b$ 次;如果是 $0$ 表示没有提交过。因此对于下述记录:

名字ABCDEFGH
Smith-1-16800120390
John116-211008255(1)0
Jose72(3)12610-304721(2)-2
Bush0-1-800000
Alice-267(2)13-1013379(1)-1
Bob0057(5)00168-70

若每一道正确通过的题目罚时为耗时 + 错误次数 $\times 20$ 分钟,则其排名从高到低应该是这样的:

排名名字题数罚时
1Jose5376
2John4284
3Alice4352
4Smith3167
5Bob2325
6Bush00

实际上排名规则如下,先按正确题数的多少排,多的在前,再按罚时的多少排,少的在前,如果凑巧前两者都相等,则按名字的字典序排,小的在前。

输入格式

第一行是考试题数 $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