为了庆祝这一天,白茶决定举行聚会。白茶将众人按亲密度排名,并选出排名前几的若干人发出邀请。然而白茶认为很多人亲密度都一样,所以出现了很多排名并列。
给定一个 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 n 且 m_x=m_y,则 k_x=k_y;若整数 x 满足 2 \leq x \leq n 且 m_{x-1} > m_{x},则 k_{x} = x。k_1=1。一个人被列入邀请名单当且仅当 k_i \leq r。
举个例子,如果 a,b,c 总分均为 100,d,e 总分为 99,f 总分为 98,h 总分为 66,i,j 总分为 0,那么从 a 到 j 的排名分别为 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 杯程序设计竞赛 (现场赛)