推荐题目:洛谷 P16510 [GKS 2015 #C] gRanks

题目描述

在洛谷,可提交!

世界上有许多伟大的运动员,很难说在某一特定运动中谁是全世界最优秀的,尤其是当不同的运动员赢下了不同的比赛时。以下是一种可能的运动员排名系统:

  1. 确定在任何比赛中,值得为运动员计算积分的完赛名次数量 P P P,以及每个名次所值的分数 S i S_i Si。例如,对于 P = 3 P = 3 P=3,一种可能的分配方式是:第 1 名获得 1000 分,第 2 名获得 500 分,第 3 名获得 300 分,低于此名次得 0 分。(我们假设比赛内不存在并列情况。)

  2. 由于并非所有比赛都同等重要,需要为每场比赛分配一个权重 W i W_i Wi。运动员在某场比赛中获得的分数将是步骤 1 中的积分,再乘以该场比赛的权重。例如,我们可以规定奥运会的权重为 5,并结合前述例子,奥运会冠军将获得 5 × 1000 = 5000 5 \times 1000 = 5000 5×1000=5000 分。

  3. 由于不想仅仅因为运动员参加了很多比赛就给予奖励,我们只计算一位运动员在所有比赛中获得的分数中,最高的 M M M 个分数。例如,如果 M = 2 M = 2 M=2,而一位运动员在三场不同的比赛中分别获得了 1000 × 5 1000\times 5 1000×5、 500 × 1 500\times 1 500×1 和 300 × 3 300\times 3 300×3 的分数,则只有 5000 分和 900 分会被计入。

给定每名次的得分、各比赛的权重以及比赛结果,你能为所有出现在比赛中的运动员排名吗?如果多名运动员得分相同,他们将共享相同的排名,并按他们名字的字母顺序列出。

输入格式

输入的第一行给出测试用例的数量 T T T。接下来是 T T T 个测试用例;每个测试用例包含以下内容:

  1. 一行包含一个整数 P P P,表示授予积分的前 P P P 个名次的数量。
  2. 一行包含 P P P 个整数,表示从前几名开始依次往下的名次得分 S i S_i Si。
  3. 一行包含一个整数 N N N,表示比赛的数量。
  4. 接下来 N N N 行,每行代表一场比赛。每行以一个整数 W i W_i Wi 开始,表示该场比赛的权重,随后是获得前 P P P 名的运动员的姓名。姓名按从第 1 名开始的降序列出。
  5. 一行包含一个整数 M M M,表示计入一位运动员得分的最大比赛数量。

输出格式

对于每个测试用例,输出一行形如 "Case #x:" 的内容,其中 x x x 是测试用例编号(从 1 1 1 开始)。然后按从最高排名到最低排名的顺序,为每位运动员输出一行,格式为 r r r : name,其中 r r r 是该运动员的排名,name 是该运动员的姓名。你需要为输入中出现的所有运动员排名。

输入输出样例 #1

输入 #1

复制代码
1
2
1000 500
6
5 BOLT GAY
4 GAY BOLT
1 GAY TIANBING
1 GAY PEIMENG
1 TIANBING LARRY
1 PEIMENG LARRY
2

输出 #1

复制代码
Case #1:
1: BOLT
2: GAY
3: PEIMENG
3: TIANBING
5: LARRY

说明/提示

在第一个样例中,Bolt 在他参加的两场比赛中总共获得了 7000 7000 7000 分。Gay 如果所有比赛都计入的话,总共能获得 8500 8500 8500 分,但此样例中只计入最高的 2 2 2 场比赛,因此 Gay 获得了 6500 6500 6500 分,排名第二。由于 Peimeng 和 Tianbing 都获得了 1500 1500 1500 分,他们并列第三,并按姓名列出。Larry 排在最后,因为他只获得了 1000 1000 1000 分。

限制

1 ≤ T ≤ 10 1 \le T \le 10 1≤T≤10。

1 ≤ S i ≤ 1000 1 \le S_i \le 1000 1≤Si≤1000。

S i > S i + 1 S_i > S_{i+1} Si>Si+1。

1 ≤ W i ≤ 1000 1 \le W_i \le 1000 1≤Wi≤1000。

每个姓名仅由大写字母 A 到 Z 组成,且长度不超过 10 10 10 个字符。

小数据集(测试集 1 - 可见)

1 ≤ P ≤ 10 1 \le P \le 10 1≤P≤10。

1 ≤ N ≤ 10 1 \le N \le 10 1≤N≤10。

1 ≤ M ≤ 10 1 \le M \le 10 1≤M≤10。

大数据集(测试集 2 - 隐藏)

1 ≤ P ≤ 100 1 \le P \le 100 1≤P≤100。

1 ≤ N ≤ 100 1 \le N \le 100 1≤N≤100。

1 ≤ M ≤ 100 1 \le M \le 100 1≤M≤100。

相关推荐
沫璃染墨10 分钟前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
时间的拾荒人14 分钟前
Qt 窗口系统详解:从菜单栏到对话框的完整指南
开发语言·qt·面试
专业程序开发源17 分钟前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
用户0942485680319 分钟前
第23章:OpenJDK逃逸分析、标量替换与锁优化
java·jvm
wuminyu21 分钟前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
Felven27 分钟前
B. Reverse a Permutation
c语言
樱花落木兰32 分钟前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存
wuyk55534 分钟前
Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过
开发语言·爬虫·python
HAHAXX839 分钟前
电商RPA批量上架通用方案:一套流程如何同时跑通拼多多、抖店、淘宝和跨境平台
java·运维·rpa
流形填表39 分钟前
题库去重实战:基于题干指纹的重复题清理
开发语言·c#