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
提示
由于有500000个数据,输入和输出务必使用scanf和printf
#include <iostream> #include <vector> #include<algorithm> #include <cstdio> #include <utility> #include <string> using namespace std; typedef struct gra { int first; int second; int order; char a[20]; }gra; bool gradeodring(gra a,gra b) { if(a.first==b.first) if(a.second==b.second) return a.order>b.order; else return a.second<b.second; return a.first>b.first; } int main() { //freopen("a.txt","r",stdin); vector<gra> grade; gra b; int n; scanf("%d",&n); while(n--) { scanf("%d%d%s",&b.first,&b.second,&b.a); b.order=n; { grade.push_back(b); } } sort(grade.begin(),grade.end(),gradeodring); vector<gra>::iterator it; for(it=grade.begin();it!=grade.end();it++) printf("%s\n",it->a); }