18107 校赛排名(c++STL中的sort的应用)

18107 校赛排名

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

分析

每个数据应有4个数据,因为题目说,通过题数相同和罚时相同的按录入先后输出,故应在结构体中加一个输出先后的元素。
因为每个数据有四个元素,故无法直接用sort排序,需要改变其排序规则。

源码

#include            //scanf、printf
#include         //sort()
using namespace std;
struct data
{
    int num;        //通过题数
    int time;       //罚时
    int order;      //为第几个输出
    char name[20];  //成员名字
};              //定义成员结构体
data A[500000];         //定义一个结构体数组,如果定义在函数里面会爆掉,申请的空间太大了
int comp(data &a,data &b)       //建立一个符合题意的排序规则
{
    if(a.num==b.num)            //如果通过题数相等
    {
        if(a.time==b.time)      //如果罚时相等
        return a.orderb.num;         //如果通过题数不相等,则通过题数多的在前面
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i

你可能感兴趣的:(c++中STL容器的应用)