1520. 白茶与排名并列

为了庆祝这一天,白茶决定举行聚会。白茶将众人按亲密度排名,并选出排名前几的若干人发出邀请。然而白茶认为很多人亲密度都一样,所以出现了很多排名并列。

给定一个 n 行的亲密度得分 - 姓名表,现打算对亲密度排名小于等于 r 的人发出邀请。若亲密度越高排名越靠前,且亲密度相同者赋予相同的排名,试计算每个人的排名并确定邀请名单。亲密度得分 - 姓名表已经按照亲密度降序排序

具体而言,用 m_i 表示表格第 i 行对应的得分,k_i 表示该人的排名。保证在两名或以上人员的情况下 m_i \geq m_{i+1} 对于整数 1 \leq i \leq n-1 恒成立。若整数 x,y 满足 1 \leq x,y \leq nm_x=m_y,则 k_x=k_y;若整数 x 满足 2 \leq x \leq nm_{x-1} > m_{x},则 k_{x} = xk_1=1。一个人被列入邀请名单当且仅当 k_i \leq r

举个例子,如果 a,b,c 总分均为 100d,e 总分为 99f 总分为 98h 总分为 66i,j 总分为 0,那么从 aj 的排名分别为 1,1,1,4,4,6,7,8,8。假设 r\geqslant8,那么他们都应该被列入邀请名单。

输入

输入第一行包含两个用空格间隔的整数 n,r\ (1\leq n\leq 10^4,1 \leq r\leq n)

接下来 n 行每行包含一个整数 m_i \ (0 \leq m\leq 10^9) 和一个字符串 x_i,用空格间隔,分别表示第 i 个人的得分和姓名。保证 x 仅由 ASCII 码中的可显示字符组成且不包括空格、制表符、换行符,保证 x 的长度满足 1\leq |x| \leq 10

数据已经按照亲密度得分降序排序。

输出

输出第一行包含一个整数,表示表格中最后一行(即第 n 行)对应的人的得分排名。

接下来输出若干行,按照输入顺序输出排名小于等于 r 的所有人,每行输出一个整数一个字符串,用空格间隔,分别表示该人的得分排名和姓名。

样例

标准输入 复制文本
10 8
10000 iqom
100 slou
100 lous
100 ousl
99 uslo
99 soso
98 lulu
96 susu
0 uols
0 ssss
标准输出 复制文本
9
1 iqom
2 slou
2 lous
2 ousl
5 uslo
5 soso
7 lulu
8 susu
标准输入 复制文本
11 5
666 jin_le
233 sang_ze
233 public
222 final
166 String
166 title
165 xue_jie
100 bobby
70 lr580
70 dayuanx
10 phamton
标准输出 复制文本
11
1 jin_le
2 sang_ze
2 public
4 final
5 String
5 title

来源

2021 软件学院 AK 杯程序设计竞赛 (现场赛)

登录以提交代码。
单点时限 2 秒
内存限制 512 MB
提交 1059
通过 237