1561. PAT 评测

PAT 的排名列表是根据状态列表产生的,状态列表中显示了所有提交记录的分数。

现在,请你为 PAT 生成排名列表。

输入格式

第一行包含三个整数 $N,K,M$,分别表示总用户数量,题目数量,以及提交数量。

用户编号是从 $00001$ 到 $N$ 的 $5$ 位数字。

问题编号从 $1$ 到 $K$。

第二行包含 $K$ 个整数 $p_1,p_2,…,p_K$,其中 $p_i$ 表示第 $i$ 题的满分。

接下来 $M$ 行,每行包含一个提交信息,包括用户编号,题目编号,以及得分。

当提交无法正确编译时,得分显示 $-1$,否则是一个 $[0,该题满分]$ 范围内的整数。

注意,无法编译的情况虽然显示 $-1$,但得分上算作 $0$ 分。

输出格式

以下列格式输出排名列表:

rank user_id total_score s[1] ... s[K]

其中,rank 是根据 total_score 计算的,所以拥有相同 total_score 的用户的 rank 也相同。

s[i] 是第 $i$ 个问题获得的分数。

如果某个问题,用户从未提交过代码,则用 - 来表示这道题的分数。

如果某个问题,用户多次提交过代码,则取最高分为这道题的分数。

列表必须根据排名从前到后输出,对于排名相同的用户,根据满分题目的数量以降序对用户排序,如果仍有排名相同的情况,则按 ID 升序的顺序排序。

对于从未提交过任何代码,或者从未提交过任何编译通过的代码的用户,输出时不予考虑。

数据范围

$1 \le N \le 10^4$,
$1 \le K \le 5$,
$1 \le M \le 10^5$
每道题的满分为不超过 $30$。

输入样例:

7 4 20
20 25 25 30
00002 2 12
00007 4 17
00005 1 19
00007 2 25
00005 1 20
00002 2 2
00005 1 15
00001 1 18
00004 3 25
00002 2 25
00005 3 22
00006 4 -1
00001 2 18
00002 1 20
00004 1 15
00002 4 18
00001 3 4
00001 4 2
00005 2 -1
00004 2 0

输出样例:

1 00002 63 20 25 - 18
2 00005 42 20 0 22 -
2 00007 42 - 25 - 17
2 00001 42 18 18 4 2
5 00004 40 15 0 25 -