#615. [26届信息素养复赛模拟] 借阅排行榜

[26届信息素养复赛模拟] 借阅排行榜

题目背景

小赵是学校图书馆的管理员,他想要创建一个图书借阅排行榜,以鼓励学生们多读书。他希望程序能够根据学生的借阅次数来排名,并显示借阅最多的前几名学生。

题目描述

编写一个程序,输入学生的借阅记录。程序应能够根据借阅次数对学生进行排名,并输出借阅次数最多的前 NN 名学生名单。

输入格式

输入一个正整数 KK1K1001 \le K \le 100),表示借阅记录的数量(不同的记录中不会出现相同的学生姓名)。

接下来 KK 行,每行输入一个学生姓名和一个整数 TT1T1001 \le T \le 100),代表该学生的借阅次数。

输入一个正整数 NNNKN \le K),表示想要输出的排名数量。

输出格式

输出前 NN 名学生的姓名和借阅次数,按借阅次数从多到少排序(如果不同的人借阅的书籍数量一致,按输入的先后顺序输出)。

样例

8
John 5
Tom 6
Anna 3
Emma 7
Lucy 2
Mike 4
Monica 5
Wendy 8
3
Wendy 8
Emma 7
Tom 6
8
John 5
Tom 7
Anna 3
Emma 7
Lucy 2
Mike 4
Monica 5
Wendy 8
3
Wendy 8
Tom 7
Emma 7

样例解释

对于第 11 组样例:K=8K = 8,读入 88 名学生及借阅次数。N=3N = 3,需要输出借阅次数最多的前 33 名学生。根据规则,借阅次数从高到低依次为 Wendy(88 次)、Emma(77 次)、Tom(66 次),并按顺序输出。

对于第 22 组样例:借阅次数与第 11 组相比,Tom 的借阅次数变为 77。由于 Tom 与 Emma 借阅次数同为 77,此时按输入先后顺序,Tom 先于 Emma 输入,因此在排序结果中 Tom 排在 Emma 之前。输出前 33 名依次为 Wendy、Tom、Emma。

数据范围

子任务 分值 数据范围 特殊性质
11 3030 K10K \le 10
22 7070 K100K \le 100