5-41 PAT排名汇总 (25分)

原创 2016年08月30日 12:14:00

5-41 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

思路
比较懒,喜欢直接调用库函数qsort。先分段快排每个考点的学生排名,最后把所有考点整合起来再调用快排。然后就输出了。
点击访问 PTA-测验

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
/* 评测结果 时间  结果  得分  题目  编译器     用时(ms)  内存(MB)  用户
2016-08-30 12:10    答案正确    25  5-41    gcc     41  3   569985011
测试点结果 测试点   结果  得分/满分   用时(ms)  内存(MB)
测试点1    答案正确    12/12   14  1
测试点2    答案正确    6/6     1   1
测试点3    答案正确    1/1     21  1
测试点4    答案正确    6/6     41  3
查看代码*/
typedef struct node *Node;
struct node {
    char identifier[14];//考号,第二顺位排序依据
    int score;//分数,第一顺位排序依据
    int kaodian;//隶属考点
    int Sort_kaodian;//考点内排名
    int Sort_ToTle;
}*Students[30001];

int comp(const void*a,const void*b) {
    Node x=*(Node*)a;
    Node y=*(Node*)b;
//  printf("[x%s-%d]",x->identifier,x->score);
//  printf("[y%s-%d]",y->identifier,y->score);
    if(x->score!=y->score) {
        return y->score-x->score;
    } else {

        return strcmp(x->identifier,y->identifier);
    }

}

int main() {
    int n;//<=100
    scanf("%d",&n);
    int left=0;
    int sum=0;
    for(int i=0; i<n; i++) {
        int m;//<=300
        scanf("%d",&m);
        left=sum;
        for(int j=0; j<m; j++) {
            Students[sum]=(Node)malloc(sizeof(struct node));
            scanf("%s%d",&Students[sum]->identifier,&Students[sum]->score);
            Students[sum++]->kaodian=i+1;
//          printf("\n{%s-%d}",Students[sum-1]->identifier,Students[sum-1]->score);
        }
        qsort(&Students[left],m,sizeof(Node),comp);
        Students[left]->Sort_kaodian=1;
        for(int j=left+1; j<sum; j++) {
            if(Students[j]->score==Students[j-1]->score)Students[j]->Sort_kaodian=Students[j-1]->Sort_kaodian;
            else Students[j]->Sort_kaodian=j-left+1;
        }
    }
    printf("%d\n",sum);
    qsort(Students,sum,sizeof(Node),comp);
    Students[0]->Sort_ToTle=1;

    for(int i=0; i<sum; i++) {
        printf("%s",Students[i]->identifier);
//      printf(" %d",Students[i]->score);
        if(i) {
            if(Students[i]->score!=Students[i-1]->score) {
                Students[i]->Sort_ToTle=i+1;
            } else {
                Students[i]->Sort_ToTle=Students[i-1]->Sort_ToTle ;
            }
        }
        printf(" %d",Students[i]->Sort_ToTle );
        printf(" %d",Students[i]->kaodian);
        printf(" %d\n",Students[i]->Sort_kaodian);
    }




    return 0;
}


版权声明:写这些东西还是问了交流进步,如果你有不同的方法、见解,欢迎交流分享。文章中附的代码只传达当时我的一种做法,并非我认为最好的。

PAT 计算机程序设计能力考试

【官方简介】         计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,...
  • David_Jett
  • David_Jett
  • 2016年07月12日 19:11
  • 6823

PAT 计算机程序设计能力考试

【官方简介】         计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力...
  • bat67
  • bat67
  • 2016年08月06日 08:43
  • 1770

7-07. PAT排名汇总(25) (结构体 ZJU_PAT)

7-07. PAT排名汇总(25) (结构体 ZJU_PAT)
  • u012860063
  • u012860063
  • 2014年11月20日 20:10
  • 1902

5-4 PAT排名汇总 (25分)

5-4 PAT排名汇总   (25分) 计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法...
  • shi201619616
  • shi201619616
  • 2017年07月08日 19:59
  • 79

PAT排名汇总 (25分)

PAT排名汇总   (25分) 计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程...
  • mengxina
  • mengxina
  • 2017年03月24日 12:21
  • 533

10-排序5 PAT Judge (25分)

排序规则: 1. 总分相同,名次相同。 2. 总分相同,按照完全正确的题目数量排序。 3. 1、2一致,根据id排名。 4. 没有通过编译的,或者没有得分的,不列出。 5. 保证至少有一个人能出现...
  • Van0512
  • Van0512
  • 2016年11月04日 01:30
  • 539

7-07. PAT排名汇总(25) (结构体 ZJU_PAT)

7-07. PAT排名汇总(25) (结构体 ZJU_PAT)
  • u012860063
  • u012860063
  • 2014年11月20日 20:10
  • 1902

5-6 列出连通集 (25分)

5-6 列出连通集   (25分) 给定一个有NN个顶点和EE条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N-1N−1编号。进行搜索时,假设我们总是从编号最小的...
  • qq_32511479
  • qq_32511479
  • 2017年01月30日 00:13
  • 120

【PTA 5-11 玩转二叉树 (25分)】+ 二叉树

5-11 玩转二叉树 (25分) 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相...
  • WYK1823376647
  • WYK1823376647
  • 2017年03月23日 21:48
  • 516

5-43 字符串关键字的散列映射 (25分)

5-43 字符串关键字的散列映射 (25分)给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数H(Key)将关键字Key中的最后3个字符映射为整数,每个字符占5位;再用除留...
  • Changxing898
  • Changxing898
  • 2016年08月30日 12:23
  • 1411
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:5-41 PAT排名汇总 (25分)
举报原因:
原因补充:

(最多只允许输入30个字)