• 1025 PAT Ranking (25分)


    这题给出了(PAT)的排名规则

    在结构体类型中存放题目要求的信息(准考证号、分数、考场号以及考场内排名)。

    根据题目要求,需要写一个排序函数cmp,规则如下:

    1. 当分数不同时,按分数从大到小排序。
    2. 否则,按准考证号从小到大排序。

    而算法本体则分为下面三个部分:

    1. 按考场读入各考生的信息,并对当前读入考场的所有考生进行排序。之后将该考场的所有考生的排名写入他们的结构体中。
    2. 对所有考生进行排序,计算总排名。
    3. 输出所有考生的信息。
    const int N=30010;
    struct Node {
        string id;
        int score;
        int final_rank;
        int local_number;
        int local_rank;
    }a[N];
    
    
    int n,k;
    
    bool cmp(Node &a, Node &b)
    {
        if(a.score == b.score) return a.id < b.id;
        return a.score > b.score;
    }
    
    int main()
    {
        cin>>n;
    
        int cnt=0;
        for(int i=1;i<=n;i++)
        {
            cin>>k;
    
            int l=cnt;
            for(int j=0;j<k;j++)
            {
                cin>>a[cnt].id>>a[cnt].score;
                a[cnt].local_number=i;
                cnt++;
            }
            int r=cnt;
    
            sort(a+l,a+r,cmp);
    
            int local_rank=1;
            for(int i=l;i<r;i++)
            {
                if(i > l && a[i].score == a[i-1].score)
                    a[i].local_rank = a[i-1].local_rank;
                else a[i].local_rank = local_rank;
                local_rank++;
            }
        }
    
        cout<<cnt<<endl;
    
        sort(a,a+cnt,cmp);
    
        int final_rank=1;
        for(int i=0;i<cnt;i++)
        {
            if(i && a[i].score == a[i-1].score)
                a[i].final_rank = a[i-1].final_rank;
            else a[i].final_rank = final_rank;
            final_rank++;
        }
    
        for(int i=0;i<cnt;i++)
            cout<<a[i].id<<' '<<a[i].final_rank<<' '<<a[i].local_number<<' '<<a[i].local_rank<<endl;
    
        //system("pause");
        return 0;
    }
    

    (update on 2021.2.14)
    作了略微的修改:

    const int N=30010;
    struct Node {
        string id;
        int score;
        int final_rank;
        int local_number;
        int local_rank;
        bool operator<(const Node &W) const
        {
            if(score == W.score) return id < W.id;
            return score > W.score;
        }
    }a[N];
    int n,k;
    
    int main()
    {
        cin>>n;
    
        int cnt=0;
        for(int i=1;i<=n;i++)
        {
            cin>>k;
    
            int l=cnt;
            for(int j=0;j<k;j++)
            {
                cin>>a[cnt].id>>a[cnt].score;
                a[cnt].local_number=i;
                cnt++;
            }
            int r=cnt;
    
            sort(a+l,a+r);
    
            for(int j=l;j<r;j++)
            {
                if(j > l && a[j].score == a[j-1].score)
                    a[j].local_rank = a[j-1].local_rank;
                else a[j].local_rank = j-l+1;
            }
        }
    
        cout<<cnt<<endl;
    
        sort(a,a+cnt);
    
        for(int i=0;i<cnt;i++)
        {
            if(i && a[i].score == a[i-1].score)
                a[i].final_rank = a[i-1].final_rank;
            else a[i].final_rank = i+1;
        }
    
        for(int i=0;i<cnt;i++)
            cout<<a[i].id<<' '<<a[i].final_rank<<' '<<a[i].local_number<<' '<<a[i].local_rank<<endl;
    
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    SQL Server 跨服务器 存储过程传字符串数组不同数据库之间复制表的数据
    SQL Server 跨服务器 存储过程不同数据库之间复制表的数据
    SQL Server 跨服务器 存储过程不同数据库之间复制表的数据
    SQL Server跨服务器查询
    抓包自定义过滤器需加%XXXX%,如%third_play%
    svn 清理命令失败
    通过windug判断某个模块导致程序不能退出。
    如果判断不出是不是某个模块出的问题,删除此模块测试。
    读配置前把vector清掉
    DNS服务器的原理
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14350417.html
Copyright © 2020-2023  润新知