题目描述
520,因为谐音为我爱你,所以也被称之为表白日。
这一天,人们借机把藏在心底的洪荒之力通过表白、撒娇、传情、送礼、结婚等形式释放出来,商家也会趁势开展各类优惠促销活动,掀起一波或浪漫或虐狗的节日热浪。
这一天,也是送男朋友礼物、送女朋友礼物、送自己礼物、送亲朋好友礼物的好时机。
在520即将到来之际,wwx准备为她的女朋友购买一批礼物。于是他列出了一份礼物清单,但由于预算有限,必须删掉一种礼物。经过深思熟虑,他决定删掉价格第k高的礼物,你能帮帮他,找出是哪一种礼物吗?
输入描述:
第一行是一个整数T(1<=T<=80),表示有T组数据. 对于每一组数据,首先一行输入N(3<=N<=1000),接下来的N行每行输入一个字符串和一个整数,以空格间隔,分别作为每种礼物的名字和价格。 接下来一行输入k,表示要删去第k(1<=<=N)高的礼物 礼物的名字的长度不超过30,礼物的价格不超过1000,且均为整数。
输出描述:
对于每组输入数据,依次输出它的组号和要删去的礼物的名字和价格,以空格间隔。 若两种商品的价格相同,则比较礼物名字的字典序大小。即:两种礼物的价格相同时,字典序大者若为第k高,字典序小者则为第k+1高。
示例1
输入
2 3 Apple 18 Book 30 Milk 8000 3 4 Apple 300 Bananas 200 Bracelet 200 Candy 200 3
输出
#1: Apple 18 #2: Bracelet 200
备注:
1. 可用strcmp(s1,s2)函数进行字符串的比较。 2. 对于样例一中第二组数据:Apple 300是价格第一大,Candy 200是价格第二高,Bracelet 200是价格第三大。
import java.util.*;
public class Main {
static class Gift
{
String name;
int v;
public Gift(String name, int v) {
super();
this.name = name;
this.v = v;
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();
int count=0;
while(T-->0)
{
count++;
int n=sc.nextInt();
List<Gift> gifts=new ArrayList<>();
for(int i=0;i<n;i++)
{
gifts.add(new Gift(sc.next(),sc.nextInt()));
}
Collections.sort(gifts, new Comparator<Gift>() {
@Override
public int compare(Gift o1, Gift o2) {
if(o1.v==o2.v)
{
return o2.name.compareTo(o1.name);
}
return o2.v-o1.v;
}
});
int k=sc.nextInt();
Gift g=gifts.get(k-1);
System.out.println("#"+count+": "+g.name+" "+g.v);
}
}
}