再学一道算法题:PAT排名汇总 (排序+存储)

简介: 再学一道算法题:PAT排名汇总 (排序+存储)

PAT排名汇总
分数 25
作者 陈越
单位 浙江大学
计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,科学的评价计算机程序设计人才,为企业选拔人才提供参考标准(网址http://www.patest.cn)。

每次考试会在若干个不同的考点同时举行,每个考点用局域网,产生本考点的成绩。考试结束后,各个考点的成绩将即刻汇总成一张总的排名表。

现在就请你写一个程序自动归并各个考点的成绩并生成总排名表。

输入格式:
输入的第一行给出一个正整数N(≤100),代表考点总数。随后给出N个考点的成绩,格式为:首先一行给出正整数K(≤300),代表该考点的考生总数;随后K行,每行给出1个考生的信息,包括考号(由13位整数字组成)和得分(为[0,100]区间内的整数),中间用空格分隔。

输出格式:
首先在第一行里输出考生总数。随后输出汇总的排名表,每个考生的信息占一行,顺序为:考号、最终排名、考点编号、在该考点的排名。其中考点按输入给出的顺序从1到N编号。考生的输出须按最终排名的非递减顺序输出,获得相同分数的考生应有相同名次,并按考号的递增顺序输出。

输入样例:
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
输出样例:
9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4

#include <vector>
#include <algorithm>
using namespace std;

typedef struct{
    string id;//考号
    int score;//成绩
    int final;//最终排名
    int testid;//考点编号
    int test;//本考点排名
}Stu;

Stu stu[30005];//因为N<=100,K<=300,最终不会超过30000,我喜欢开大一点

bool cmp(Stu s1,Stu s2){
    if(s1.score!=s2.score){
        return s1.score > s2.score;
    }
    else{
        return s1.id < s2.id;
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int n;
    cin >> n;
    int p = 0;
    vector<Stu> v;
    for(int i = 0;i<n;i++){
        v.clear();
        int k;
        Stu s;
        cin >> k;
        for(int j = 0;j<k;j++){
            cin >> s.id >> s.score;
            s.testid = i+1;
            v.push_back(s);
        }
        sort(v.begin(),v.end(),cmp);
        int g = 1;
        v[0].test = 1;
        stu[p++] = v[0];
        for(int m = 1;m<v.size();m++){
            g++;
            if(v[m].score==v[m-1].score){
                v[m].test = v[m-1].test;
            }
            else{
                v[m].test = g;
            }
            stu[p++] = v[m];
        }
    }
    sort(stu,stu+p,cmp);
    int grade = 1;
    stu[0].final = grade;
    for(int i = 1;i<p;i++){
        grade++;
        if(stu[i].score==stu[i-1].score){
            stu[i].final = stu[i-1].final;
            continue;
        }
        else{
            stu[i].final = grade;
        }
    }
    cout << p << endl;
    for(int i = 0;i<p;i++){
        cout << stu[i].id << " " << stu[i].final << " " << stu[i].testid << " " << stu[i].test << endl;
    }
    return 0;
}

相关文章
|
3天前
|
人工智能 算法 测试技术
【数学】【排序】【C++算法】3027人员站位的方案数
【数学】【排序】【C++算法】3027人员站位的方案数
|
3天前
|
人工智能 算法 BI
【优选算法专栏】专题十八:BFS解决拓扑排序(一)
【优选算法专栏】专题十八:BFS解决拓扑排序(一)
21 0
|
3天前
|
算法
【优选算法专栏】专题十八:BFS解决拓扑排序--前言
【优选算法专栏】专题十八:BFS解决拓扑排序--前言
22 1
|
3天前
|
存储 监控 NoSQL
Redis处理大量数据主要依赖于其内存存储结构、高效的数据结构和算法,以及一系列的优化策略
【5月更文挑战第15天】Redis处理大量数据依赖内存存储、高效数据结构和优化策略。选择合适的数据结构、利用批量操作减少网络开销、控制批量大小、使用Redis Cluster进行分布式存储、优化内存使用及监控调优是关键。通过这些方法,Redis能有效处理大量数据并保持高性能。
22 0
|
3天前
|
存储 算法 人工智能
|
3天前
|
算法
常见的算法排序(2)
常见的算法排序(2)
12 3
|
3天前
|
算法 搜索推荐 索引
数据结构与算法 排序(下)
数据结构与算法 排序(下)
12 1
|
3天前
|
缓存 算法 搜索推荐
数据结构与算法 排序(上)
数据结构与算法 排序(上)
11 0
|
3天前
|
算法 调度
【问题探讨】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究
【问题探讨】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究
|
3天前
|
搜索推荐 C语言
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
11 0