链接:https://www.nowcoder.com/acm/contest/121/A
来源:牛客网
题目描述
520,因为谐音为我爱你,所以也被称之为表白日。
这一天,人们借机把藏在心底的洪荒之力通过表白、撒娇、传情、送礼、结婚等形式释放出来,商家也会趁势开展各类优惠促销活动,掀起一波或浪漫或虐狗的节日热浪。
这一天,也是送男朋友礼物、送女朋友礼物、送自己礼物、送亲朋好友礼物的好时机。
在520即将到来之际,wwx准备为她的女朋友购买一批礼物。于是他列出了一份礼物清单,但由于预算有限,必须删掉一种礼物。经过深思熟虑,他决定删掉价格第k高的礼物,你能帮帮他,找出是哪一种礼物吗?
输入描述:
第一行是一个整数T(1<=T<=80),表示有T组数据. 对于每一组数据,首先一行输入N(3<=N<=1000),接下来的N行每行输入一个字符串和一个整数,以空格间隔,分别作为每种礼物的名字和价格。 接下来一行输入k,表示要删去第k(1<=<=N)高的礼物 礼物的名字的长度不超过30,礼物的价格不超过1000,且均为整数。
输出描述:
对于每组输入数据,依次输出它的组号和要删去的礼物的名字和价格,以空格间隔。 若两种商品的价格相同,则比较礼物名字的字典序大小。即:两种礼物的价格相同时,字典序大者若为第k高,字典序小者则为第k+1高。
链接:https://www.nowcoder.com/acm/contest/121/A
来源:牛客网
示例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是价格第三大。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct gifte
{
char m[31];
int v;
}gift[1001];
int com(gifte a,gifte b) //不能写gift
{
if(a.v==b.v){
return strcmp(a.m,b.m)>0; // 按字典序排序
}
else
return a.v>b.v;
}
int main()
{
//freopen("D:\\测试样例.txt","r",stdin);
int t,n,k,T=1;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s%d",&gift[i].m,&gift[i].v);
}
scanf("%d",&k);
sort(gift,gift+n,com);
printf("#%d: %s %d\n",T++,gift[k-1].m,gift[k-1].v);
}
return 0;
}
终于解决了困扰已久的问题!!!(这篇博客真的难发)