题目1346:会员积分排序
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:717
解决:295
-
题目描述:
-
元旦佳节快到了,超市A想要给会员一些奖品。但是奖品有限,所以它需要给这些会员做一个排序,然后将名单输出来。排序的规则是,先按积分排序,如果会员的积分相同则按他的ID排序,因为ID号小则表示他注册的时间早。
现在某超市有每个会员的ID(ID保证不重复)、积分,它想要请你帮忙给排个序。
-
输入:
-
输入有多组数据。
每组第一行输入n(1<=n<=1000),m(1<=m<=50),n表示会员个数,m表示奖品个数;之后N行分别是两个整数id和s,id为这个会员的ID,s代表了这个会员的积分。
-
输出:
-
对每组输入输出min(m,n)个获奖的会员ID(按积分降序输出,如果积分相同按ID升序输出),每个会员ID一行。
-
样例输入:
-
5 3 1 5 2 10 3 3 4 20 5 2
-
样例输出:
-
4 2 1
-
-
#include<iostream> #include<algorithm> #include<vector> using namespace std; typedef struct { int id; int grade; }N; bool cmp(N a,N b) { if(a.grade!=b.grade)return a.grade>b.grade; else return a.id<b.id; } int min(int a,int b) { if(a<=b)return a; else return b; } int main() { N t; int n,m,i; vector<N> v; while(cin>>n>>m && n) { m=min(n,m); while(n--) { cin>>t.id>>t.grade; v.push_back(t); } sort(v.begin(),v.end(),cmp); for(i=0;i<m; ++i) cout<<v[i].id<<endl; v.clear(); } return 0; } /************************************************************** Problem: 1346 User: 3011216016 Language: C++ Result: Accepted Time:290 ms Memory:1520 kb ****************************************************************/