时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld
空间限制:C/C++ 65536K,其他语言131072K
64bit IO Format: %lld
题目描述
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是价格第三大。
题解:结构体+排序
#include<bits/stdc++.h> using namespace std; struct node { string name; int price; } q[1010]; bool cmp(node a,node b) { if(a.price==b.price) return a.name>b.name; return a.price>b.price; } int main() { int t,n,k,cnt=0; cin>>t; while(t--) { cin>>n; for(int i=0; i<n; i++) cin>>q[i].name>>q[i].price; sort(q,q+n,cmp); cin>>k; cout<<"#"<<++cnt<<": "<<q[k-1].name<<" "<<q[k-1].price<<endl; } return 0; }