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;

}
时间: 2024-08-04 10:40:53

7-21(排序) PAT排名汇总的相关文章

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

题目链接:http://www.patest.cn/contests/ds/7-07 编程能力测试(Programming Ability Test,简称PAT)是浙江大学计算机科学与技术学院主办的专业技术认证考试(网址http://pat.zju.edu.cn/).每次考试会在若干个不同的考点同时举行,每个考点用局域网,产生本考点的成绩.考试结束后,各个考点的成绩将即刻汇总成一张总的排名表.现在就请你写一个程序自动归并各个考点的成绩并生成总排名表. 输入格式说明: 输入的第1行给出1个正整数N

基础实验7-2.4 PAT排名汇总 (25分)

计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,科学的评价计算机程序设计人才,为企业选拔人才提供参考标准(网址http://www.patest.cn). 每次考试会在若干个不同的考点同时举行,每个考点用局域网,产生本考点的成绩.考试结束后,各个考点的成绩将即刻汇总成一张总的排名表. 现在就请你写一个程序自动归并各个考点的成绩并生成总排名表. 输入格式: 输入的第一行给出一个

排序算法大汇总

排序算法大汇总 排序算法是最基本最常用的算法,也是各大上市公司经常会被问道的面试知识点之一,不同的排序算法在不同的场景或应用中会有不同的表现,我们需要对各种排序算法熟练才能将它应用到实际应用中,才能更好的发挥他们的优势,那么今天我们来对各种算法进行一个简单的总结和分析. 冒泡排序 冒泡排序就是把小的元素往前调或者把大的元素往后调.比较是相邻的两个元素比较,交换也发生在这两个元素之间.所以,如果两个元素相等,我们不会无聊地把他们俩交换:如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相

若干排序算法简单汇总(一)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/35819279 作者:小马 从题目看,首先不是全部是若干.排序算法很多,我个人的能力也有限,不可能都讲到.另外,是简单汇总,是希望能用最简单的代码,最简短的语言说明问题,不搞太多理论分析. 就像前面说的,排序算法有很多,而且不存在哪一种最不好,哪一种最好这样的说法.根据用途不同选择最适合的就行了.不过仅从时间复杂度来看,基本上有两种,一种是O(n^2), 一种是O(nlogn).

若干排序算法简单汇总(二)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/36706131 作者:小马 一希尔排序 上一篇讲到的直接插入排序,时间复杂度O(n^2). 请在脑海里想一下它的过程.如果一个序列本来就是有序的,对它排序的时间复杂度是O(n).所以当序列基本有序时,插入排序排序的效率大大提高,因为减少了移动的动作. 另外,直接插入排序还有一个特点,当n比较小时,它的效率比较高. 希尔排序正是基于上面两个思想做的一种改进算法.它先将整个序列分成若干

Excel数据管理之排序与分类汇总视频课程

课程目标要使制作或设计的工作表更加具有可读和容易分析,可以通过一些常用的管理来实现,包括排序.分类汇总和筛选等.本课程将介绍相关的知识和技巧.适用人群电脑爱好者.所有职场人士 本课程章节计划表: 第一章 概述.最快速且最简单的排序方法第二章 按行进行排序第三章 按单元格颜色进行排序第四章 多条件排序第五章 自定义排序序列第六章 数据快速筛选及多条件筛选第七章 自定义多条件筛选第八章 自动筛选删除空行及按颜色筛选第九章 快速创建分类汇总第十章 多个汇总字段的分类汇总第十一章 多个汇总方式的分类汇总

Pandas基本功能之算术运算、排序和排名

算术运算和数据对齐 Series和DataFrame中行运算和列运算有种特征叫做广播 在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集.自动的数据对齐操作在不重叠的索引处引入了NA值,NA值在算术运算中过程中传播. import pandas as pd from pandas import Series import numpy as np s1 = Series([7.3,-2.5,3.4,1.5],index=['a','c','d','e']) s2 = Series

堆排序(选择排序)-八大排序三大查找汇总(2)

二叉堆的定义 二叉堆是完全二叉树或者是近似完全二叉树. 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值. 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆). 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆.当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆.下图展示一个最小堆: 堆的存储 一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2.它的左右子结点下标分别为2 * i + 1和2 * i + 2.如

归并排序-八大排序三大查找汇总(7)

基本思想 归并排序简单的说就是递归后合并,该算法是分治法(Divide and Conquer)的一个典型应用. 基本思想为:将待排序序列R[0...n-1]看成是n个长度为1的有序序列,两两有序表成对归并,得到n/2个长度为2的有序表:将这些有序序列再次归并,如此反复进行下去,最后得到一个长度为n的有序序列. 综上可知: 归并排序其实要做两件事: (1)“分解”——将序列每次折半划分. (2)“合并”——将划分后的序列段两两合并后排序. 性能 排序类别 排序方法 时间复杂度 空间复杂度 稳定性