获奖名单
Description
一年一度的校赛马上就要开始了,这次校赛可能使用传统的OJ形式进行。现在,你得到了参赛人员的ac记录,出题小组希望你来计算排名并求出获奖名单。
Input
多组测试数据。
第一行是两个整数n(50<=n<=1000),m(1<=m<=n),表示有n个人参加比赛,前m名获奖。
接下来有n行,每行三个数id c t,表示一条ac记录。其中id表示参赛人员的编号(1<=id<=n且id唯一),c表示出题数,t表示总罚时。
注:排名是先按出题数排序(大的在前),如果题数相同按罚时排序(小的在前),如果前两者都相同的话则按id排序(小的在前)。
Output
输出m行,表示前m名获奖的参赛队员的id。
Sample Input
5 3
1 2 100
2 3 300
5 2 99
3 1 20
4 3 250
Sample Output
4
2
5
#include<stdio.h>
#define MaxSive 1020
struct com{
int id;
int c;
int t;
};
int main()
{
int n,m,i,j;
struct com std[MaxSive],temp;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
scanf("%d %d %d",&std[i].id,&std[i].c,&std[i].t);
for(i=0;i<n;i++)
for(j=n-1;j>i;j--)
{
if(std[i].c<std[j].c)
{
temp = std[i];
std[i] = std[j];
std[j] = temp;
}
if(std[i].c==std[j].c)
{
if(std[i].t>std[j].t)
{
temp = std[i];
std[i] = std[j];
std[j] = temp;
}
}
}
for(i=0;i<m;i++)
printf("%d\n",std[i].id);
return 0;
}