7-21(排序) PAT排名汇总

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7-21(排序) PAT排名汇总相关的知识,希望对你有一定的参考价值。

计算机程序设计能力考试(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<iostream>
#include<algorithm>
#define MAX_SIZE 50010
using namespace std;

 struct Score{
   string num;
   int score;
   int kaodian;
   int mingci;
   int z_mingci;
} ;
int cmp(Score s1,Score s2){
    if(s1.score==s2.score)
        return  s1.num<s2.num;
    else
        return s1.score>s2.score;

}


int main(){
    int k,n,z=0,f;
    struct Score student[MAX_SIZE];
   cin>>k;
   for(int i=1;i<=k;i++){
    cin>>n;

    for(int j=0;j<n;j++){
        cin>>student[z].num>>student[z].score;
        student[z].kaodian=i;
        z++;
    }
     f=z-n;
     int p=1;
     sort(student+f,student+z,cmp);
     for(int q=f;q<z;q++){
            if(q==f)
        student[q].z_mingci=p;
     else
        if(student[q].score==student[q-1].score)
         student[q].z_mingci=student[q-1].z_mingci;
     else
        student[q].z_mingci=p;
        p++;
     }
   }
    sort(student,student+z,cmp);
    for(int i=0;i<z;i++){
        if(i==0){
            student[i].mingci=1;

        }
        else
        if(student[i].score==student[i-1].score){
            student[i].mingci=student[i-1].mingci;

        }
        else student[i].mingci=i+1;
    }
         cout<<z<<endl;
      for(int i=0;i<z;i++){

         cout<<student[i].num<<" "<<student[i].mingci<<" "<<student[i].kaodian<<" "<<student[i].z_mingci<<endl;
      }
     return 0;

}

 

以上是关于7-21(排序) PAT排名汇总的主要内容,如果未能解决你的问题,请参考以下文章

2 PAT排名汇总 (25分)注意 不要使用 long long int

[PAT] A1025 PAT Ranking

[PAT] A1025 PAT Ranking

PAT 甲级1025 PAT Ranking (25 分)(结构体排序,第一次超时了,一次sort即可小技巧优化)

PAT甲题题解-1012. The Best Rank (25)-排序水题

PAT甲级 1012 The Best Rank