Description
校赛结束了,每一个参赛选手由3个数据项构成(通过题数,用时分钟数,姓名),排名按照通过题数排序
通过题数多的排前,同题数的,罚时少的排前。如果题数相同,罚时也相同,而按数据读取的先后排。
给你N个参赛选手的数据,按排序先后,输出姓名
输入格式
第一个数为N,(N<=500000)
此后,每行一个参赛选手的数据,通过题数,用时分钟数,姓名,前两者为整型数,姓名为字符串(不多于20个字符)
输出格式
姓名排名
输入样例
4
3 5 Jon
5 100 Smith
3 5 Tom
6 95 Hel
输出样例
Hel
Smith
Jon
Tom
提示
由于有500000个数据,输入和输出务必使用scanf和printf
代码如下:
#include <cstdio>
#include <algorithm>//stable_sort(a,a+n,cmp) a为迭代器
using namespace std;
typedef struct
{
int ac;
int t;
char name[20];
}node;
bool cmp(node a,node b)
{
if(a.ac!=b.ac) return a.ac>b.ac;//ac数大的优先级高
else if(a.t!=b.t) return a.t<b.t;//ac数一样,用时少的优先级高
return 0;
}
node peo[500005];//数组太大不能在main内定义,否则系统不会分配
int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d%s",&peo[i].ac,&peo[i].t,peo[i].name);
}
stable_sort(peo,peo+n,cmp);//使用stable_sort稳定排序
for(i=0;i<n;i++)
{
printf("%s\n",peo[i].name);
}
return 0;
}