基础实验7-2.4 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 <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define Max 1001
using namespace std;

struct pat
{
    char num[14];//记录编号
    int sco,loca,locaran,ran;//sco记录成绩loca记录所属于location locaran记录所在location的排名 ran记录总排名
}tot[30000];//记录总的数据
int last[101];//所在location中上一个元素的下标
int ind[101];//每个location已经输出的元素个数
int no = 0;//总数据的下标
int n,k;
bool cmp(pat a,pat b)
{
    if(a.sco == b.sco)return strcmp(a.num,b.num) < 0;
    return a.sco > b.sco;
}
int main()
{
    cin>>n;
    for(int i = 1;i <= n;i ++)
    {
        cin>>k;
        last[i] = -1;//初始为-1,一开始不存在所在location 的上一个元素下标  i就是location编号
        for(int j = 0;j < k;j ++)
        {
            cin>>tot[no + j].num>>tot[no + j].sco;
            tot[no + j].loca = i;///记录location编号
        }
        no += k;//更新总下标
    }
    sort(tot,tot+no,cmp);
    cout<<no<<endl;
    cout<<tot[0].num<<‘ ‘<<1<<‘ ‘<<tot[0].loca<<‘ ‘<<++ ind[tot[0].loca]<<endl;
    tot[0].locaran = 1;
    tot[0].ran = 1;
    last[tot[0].loca] = 0;

    for(int i = 1;i < no;i ++)
    {
        if(tot[i].sco == tot[i - 1].sco)//跟前一个元素成绩相同,总排名就相同
        {
            tot[i].ran = tot[i - 1].ran;
        }
        else tot[i].ran = i + 1;//否则等于当前i + 1
        if(last[tot[i].loca] >= 0 && tot[i].sco == tot[last[tot[i].loca]].sco)//跟同一个location上一个元素成绩相同 则排名相同
        {
            tot[i].locaran = tot[last[tot[i].loca]].locaran;
            ++ ind[tot[i].loca];///当前元素所在location元素个数加1
        }
        else tot[i].locaran = ++ ind[tot[i].loca];//否则就是所在location总的元素个数
        last[tot[i].loca] = i;//更新last
        cout<<tot[i].num<<‘ ‘<<tot[i].ran<<‘ ‘<<tot[i].loca<<‘ ‘<<tot[i].locaran<<endl;
    }
}

原文地址:https://www.cnblogs.com/8023spz/p/12303493.html

时间: 2024-08-04 10:40:52

基础实验7-2.4 PAT排名汇总 (25分)的相关文章

基础实验3-2.3 共享后缀的链表 (25分)

有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上.为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀.下图给出了单词“loading”和“being”的存储形式.本题要求你找出两个链表的公共后缀. 函数接口定义: PtrToNode Suffix( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */

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-21(排序) PAT排名汇总

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

基础实验2-2.1 整数的分类处理 (20分)

给定 N 个正整数,要求你从中得到下列三种计算结果: A1 = 能被 3 整除的最大整数 A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数 A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位) 输入格式: 输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数.所有数字都不超过 100,同行数字以空格分隔. 输出格式: 在一行中顺序输出 A1.A2.A3的值,其间以 1 个空格分隔.如果某个数字不存在,则对应输出NONE. 输入样例

PAT乙级1085-----PAT单位排行 (25分)

1085 PAT单位排行 (25分) 输入样例: 10 A57908 85 Au B57908 54 LanX A37487 60 au T28374 67 CMU T32486 24 hypu A66734 92 cmu B76378 71 AU A47780 45 lanx A72809 100 pku A03274 45 hypu 输出样例: 5 1 cmu 192 2 1 au 192 3 3 pku 100 1 4 hypu 81 2 4 lanx 81 2 思路:(struct sc

基础实验1(单臂路由及利用路由器开启DHCP自动分配IP地址)

实验环境:PT 6.2 两台PC:PC1/PC2  一台cisco 2960交换机 一台2620路由器 实验目的:让PC1/PC2属于不同的VLAN,且相互通信.同时自动获取各自网段IP地址. 1.进入2960的配置模式,划分不同的vlan并将PC1/PC2划入不同的网段.并将连通路由器端口转为干道协议. 代码如下: >en #conf t config)#vlan 10 config)#vlan 20 config)#int f0/21 config)#switchport ac vlan 1

[nRF51822] 10、基础实验代码解析大全 &#183; 实验15 - RTC

一.实验内容: 配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断. TICK 中断中驱动指示灯D1 翻转状态, 即指示灯D1 以8Hz 的速率翻转状态 COMPARE0 中断中点亮指示灯D2 二.nRF51822的内部RTC结构: NRF51822 有两个RTC 时钟:RTC0,RTC1.两个RTC 均为24 位,使用LFCLK 低频时钟,并带有12 位分频器,可产生TICK.compare 和溢出

[ZigBee] 4、ZigBee基础实验——中断

前言 上一篇介绍了CC2530的IO的基础知识,并用LED的控制来展示如何配置并控制GPIO的输出,用KEY状态的读取实验来展示如何读取GPIO的状态.从上一节的KEY状态读取的代码看出是采用轮训方式的,这种方式是很浪费资源,本节将介绍一种中断方式来替换轮训的方案. 一.中断 电路依然没变,若要使用CC2530的外部中断需要使用P0IEN.PICTL.P0IFG.INE1寄存器. 按键中断初始设置为: 1 /********************************************

WLGK-51单片机接口技术基础实验 ——LED闪烁灯

WLGK-51单片机接口技术基础实验-LED闪烁灯 当我们开始接触单片机,首先接触的第一个实验就是LED灯的使用,类似于我们学习软件开始接触的第一个程序"HelloWorld",这个实验是带领我们走入"软硬件综合使用"的一个很好入门示例,51单片机是他的一个载体.下面小伙伴们,让我们一起来揭开LED的神秘面纱吧! 万立高科官网:www.wanligaoke.com 万立高科官方商城:http://www.wlgkbj.com 万立高科淘宝直销店铺:https://r