WAC639.g排名

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

g排名

世界上有很多伟大的运动员,很难说在特定运动中谁是世界上最好的运动员,特别是当不同运动员在不同的比赛中取得荣誉时。

下面是一个较为可行的运动员排名系统:

  1. 确定在比赛中可以获得荣誉积分的有效排名 PP,给前 PP 个排名依次设定荣誉积分。例如,对于 P=3P = 3,一个可能的分数分配是第一名 10001000 分,第二名 500500 分,第三名 300300 分,排在后面的不得分。
  2. 由于不同比赛的重要程度可能不同,因此需要为每个比赛设定权重 W_iW\_i。运动员在比赛中获得的最终荣誉分数将是步骤 11 中的分数与该比赛的权重的乘积。例如,我们可能会认为奥运会的权重为 55,那么继续我们前面的例子,奥运会的获胜者将获得 5×1000=50005 \times 1000 = 5000 分。
  3. 由于我们不想仅仅因为某个运动员参加的比赛场次够多就给予他高度的评价,所以我们只计算运动员在所有比赛中获得的前 MM 个最高分数。例如,如果 M=2M = 2 并且运动员在三个不同的比赛中获得 1000×5,500×11000 \times 5,500 \times 1300×3300 \times 3 的分数,则仅计算 50005000900900

给定你每个名次的荣誉分数,所有比赛的权重以及所有比赛的结果,你能对参加比赛的所有运动员进行排名吗?

如果多个运动员具有相同的分数,他们将享有相同的排名并按其姓名的字母顺序列出。

输入格式

第一行包含整数 TT,表示共有 TT 组测试数据。

每组数据第一行包含整数 PP,意义如题所述。

第二行包含 PP 个整数 S_iS\_i,其中第 ii 个整数为排名第 ii 的选手获得的荣誉分数。

第三行包含整数 NN,表示共有 NN 场比赛。

接下来 NN 行,每行表示一次比赛,首先包含一个整数,表示这场比赛的权重 W_iW\_i,然后包含 PP 个字符串,其中第 ii 个字符串表示在这次比赛中获得第 ii 名的运动员的名字。

接下来一行包含一个整数 MM,意义如题所述。

输出格式

对于每组测试数据,第一行输出 Case #x:,其中 xx 为组别编号(从 11 开始)。

然后按排名顺序每行输出一个运动员的排名和运动员的名字,格式为 r:name

数据范围

1T101 \le T \le 10,

1S_i,W_i10001 \le S\_i,W\_i \le 1000,

S_i>S_i+1S\_i > S\_{i+1},

1P,N,M1001 \le P,N,M \le 100,

数据保证运动员名字都由大写字母构成,且长度不超过 1010

样例解释

在样例中,BOLT 在他的两场比赛中总共获得了 70007000 分,排名第一。

如果所有比赛都被计算在内,GAY 的总得分将达到 85008500,但由于在这种情况下只计算前 22 个最高得分比赛,GAY 得分为 65006500 并排名第二。

由于 PEIMENG 和 TIANBING 都获得了 15001500 分,他们都排名第三。

LARRY 是最后一名,因为他的得分只有 10001000,所以他排名第五。

Samples

1
2
1000 500
6
5 BOLT GAY
4 GAY BOLT
1 GAY TIANBING
1 GAY PEIMENG
1 TIANBING LARRY
1 PEIMENG LARRY
2
Case #1:
1: BOLT
2: GAY
3: PEIMENG
3: TIANBING
5: LARRY

在线编程 IDE

建议全屏模式获得最佳体验