#SummerP0039. AtCoder 排名模拟

AtCoder 排名模拟

题目描述

如果你是一个acm选手, 我建议你把计算罚时的模拟题放入模板。 因为总有出题人闲的天天出这种题。

AtCoder 每场比赛的排名规则如下:

  1. 共有 MM 道题,第 jj 题分数为 SjS_j;选手解出某题即可获得该题全部分数,否则不得分;
  2. 总得分 = 所有解出题目的分数之和,得分高者排名靠前;
  3. 对于成功解出的题目,该题罚时 = 首次 AC 的时刻(单位:秒)+ AC 前非 CE 的错误提交次数×\times 300 秒;CE(编译错误)不计入任何统计;
  4. 未解出的题目不产生任何罚时;总罚时 = 所有解出题目的罚时的最大值,对于得分相同时,罚时少者排名靠前;
  5. 若总得分和总罚时均相同,则并列同名次,并列者按选手编号升序输出。

给定 NN 名选手、MM 道题目及其分数、以及按时间非递减给出的 KK 条提交记录,请你按照上述规则计算每名选手的最终排名、总得分和总罚时,并按排名顺序输出。

输入格式

第一行一个整数 TT1T101 \le T \le 10),表示测试数据组数。

每组数据格式如下:

第一行三个整数 N,M,KN, M, K1N2×1051 \le N \le 2 \times 10^51M201 \le M \le 200K5×1050 \le K \le 5 \times 10^5),分别表示选手人数、题目数、提交总数。

第二行 MM 个整数 S1,S2,,SMS_1, S_2, \dots, S_M1Sj1041 \le S_j \le 10^4),表示每道题的分数。

接下来 KK 行,每行描述一条提交,格式为:

其中 pp 为选手编号(1pN1 \le p \le N),qq 为题号(1qM1 \le q \le M),tt 为提交时刻(0t1060 \le t \le 10^6,单位:秒),vv 为评测结果(‘AC’、‘WA’、‘TLE’、‘RE’、‘CE’ 之一)。

保证 N2×105\sum N \le 2 \times 10^5K5×105\sum K \le 5 \times 10^5。保证每组数据的提交按时刻 tt 非递减给出。

输出格式

对每组数据,输出 NN 行,每行四个整数:排名、选手编号、总得分、总罚时。不同测试数据之间以一个空行隔开。

3
3 3 10
100 200 300
1 1 120 AC
2 1 200 WA
2 1 350 AC
2 1 500 WA
1 2 500 WA
1 2 600 AC
2 2 700 AC
2 2 800 CE
3 1 800 CE
3 3 900 WA
4 2 8
100 200
1 1 100 AC
2 1 100 AC
1 2 200 WA
1 2 300 AC
2 2 300 AC
3 1 400 WA
4 1 500 WA
4 1 600 AC
3 2 4
100 200
1 1 100 AC
2 1 100 AC
1 2 300 AC
2 2 300 AC
1 2 300 700
2 1 300 900
3 3 0 0

1 2 300 300
2 1 300 600
3 4 100 900
4 3 0 0

1 1 300 300
1 2 300 300
3 3 0 0