18107 校赛排名
时间限制:4000MS 内存限制:65535K
提交次数:0 通过次数:0
题型: 编程题 语言: G++;GCC;VC
Description
校赛结束了,每一个参赛选手由3个数据项构成(通过题数,用时分钟数,姓名),排名按照通过题数排序 通过题数多的排前,同题数的,罚时少的排前。如果题数相同,罚时也相同,而按数据读取的先后排。 给你N个参赛选手的数据,按排序先后,输出姓名
输入格式
第一个数为N,(N<=500000) 此后,每行一个参赛选手的数据,通过题数,用时分钟数,姓名,前两者为整型数,姓名为字符串(不多于20个字符)
输出格式
姓名排名
输入样例
4 3 5 Jon 5 100 Smith 3 5 Tom 6 95 Hel
输出样例
Hel
Smith
Jon
Tom
输出样例
Hel
Smith
Jon
Tom
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <string.h> #include <algorithm> #include <queue> #include <stack> #include <vector> using namespace std;typedef struct people{
int solve;
long long time;
char name[22];
}p;
int cmp(const void*p1,const void*p2)
{
struct people*c=(people*)p1;
struct people*d=(people*)p2;
if(c->solve!=d->solve) return d->solve-c->solve;
return c->time-d->time;
}
p ps[500000];
int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d%lld%s",&ps[i].solve,&ps[i].time,&ps[i].name);
ps[i].time=ps[i].time+i;
}
qsort(ps,n,sizeof(ps[0]),cmp);
for(i=0;i<n;i++){
printf("%s\n",ps[i].name);
}
return 0;
}