PTA--数据结构预习报告: 考试排名汇总

news/2024/12/2 5:11:38/
A3.
PAT 考试排名汇总 (☆☆)
【题目描述】PTA(数据结构与算法题目集 7-41)
计算机程序设计能力考试(Programming Ability Test,简称 PAT)旨在通过统一组织的在线考试及
自动评测方法客观地评判考生的算法设计与程序设计实现能力,科学的评价计算机程序设计人才,
为企业选拔人才提供参考标准。每次考试会在若干个不同的考点同时举行,每个考点用局域网,产
生本考点的成绩。考试结束后,各个考点的成绩将即刻汇总成一张总的排名表。现在就请你写一个
程序自动归并各个考点的成绩并生成总排名表。
【输入格式】
输入的第一行给出一个正整数 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
【输出样例】 4
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<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
using namespace std;
int N,k,S=0,ptr = 0;
struct stu
{
    string number;
    int point;
    int rank1;
    int mark;
    int rank2;
};
stu T[30005];

bool cmp(stu a,stu b)
{
    if(a.point > b.point){
        return true;
    }
    else if(a.point == b.point && a.number < b.number){
        return true;
    }
    return false;
}

void distribute(int k,int flag = 0)
{
    if(!flag){
        for(int i=1;i <= k;i++){
            if(i > 1 && T[ptr].point == T[ptr-1].point){
                T[ptr].rank2 = T[ptr-1].rank2;
                ++ptr;
            }
            else
                T[ptr++].rank2 = i;
        }
    }
    else{
        for(int i=0;i < k;i++){
            if(i > 0 && T[i].point == T[i-1].point){
                T[i].rank1 = T[i-1].rank1;
            }
            else
                T[i].rank1 = i+1;
        }
    }
}

void ouput()
{
    printf("%d\n",S);
    for(int i=0;i < S;i++){
        printf("%s %d %d %d\n",T[i].number.c_str(),T[i].rank1,T[i].mark,T[i].rank2);
    }
}
void input()
{
    int v=0;
    for(int i=0;i < N;i++){
        string number;
        int point;
        cin >> k;
        S += k;    
        for(int j=0;j < k;j++){
            cin >> number >> point;
            T[v].number = number;
            T[v].mark = i+1;
            T[v++].point = point;
        }
        sort(T+S-k,T+S,cmp);
        distribute(k);
    }
    sort(T,T+v,cmp);
    distribute(v,1);
}
int main()
{
    cin >> N;
    input();
    ouput();
    return 0;
}


http://www.ppmy.cn/news/1551671.html

相关文章

[免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue大景区订票(购票)系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue景区订票(购票)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息…

vue超过三行显示省略号和查看更多按钮

1、超过3行显示省略号和更多按钮&#xff0c;不超过3行正常显示&#xff1b; html: <div class"container"><div style"display: flex;"><div class"content"><div class"text-content" ref"textContentR…

Linux kernel 堆溢出利用方法(三)

前言 本文我们通过我们的老朋友heap_bof来讲解Linux kernel中任意地址申请的其中一种比赛比较常用的利用手法modprobe_path&#xff08;虽然在高版本内核已经不可用了但ctf比赛还是比较常用的&#xff09;。在通过两道道近期比赛的赛题来讲解。 Arbitrary Address Allocation…

用MATLAB符号工具建立机器人的动力学模型

目录 介绍代码功能演示拉格朗日方法回顾求解符号表达式数值求解 介绍 开发机器人过程中经常需要用牛顿-拉格朗日法建立机器人的动力学模型&#xff0c;表示为二阶微分方程组。本文以一个二杆系统为例&#xff0c;介绍如何用MATLAB符号工具得到微分方程表达式&#xff0c;只需要…

前端实现把整个页面转成PDF保存到本地(DOM转PDF)

一、问题 遇到一个需求&#xff0c;就是要把整个看板页面导出成PDF用在汇报&#xff0c;也就是要把整个DOM生成一个PDF保存到本地。 二、解决方法 1、解决思路&#xff1a;使用插件 jspdf 和 html2canvas&#xff0c;我用的版本如下图 2、代码实现 import { jsPDF } from …

C++算法练习-day52——216.组合总和3

题目来源&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目思路分析 题目描述&#xff1a;combinationSum3 问题要求从 1 到 9 的整数中找出所有可能的 k 个数的组合&#xff0c;使得这些数的和等于给定的整数 n。注意&#xff0c;这里的每个数字只能使用一次&…

将jar包导入maven

1.将jar包放repository 2.执行命令&#xff1a;mvn install:install-file -DgroupIdcom.oracle -DartifactIdojdbc7 -Dversion12.1.0.2 -Dpackagingjar -DfileD:\dev\utils\idea\repository\ojdbc7.jar -Dfile: 指定要安装的JAR文件的路径。 -DgroupId: 指定项目的groupId。 -…

Mybatis:CRUD数据操作之多条件查询及动态SQL

Mybatis基础环境准备请看&#xff1a;Mybatis基础环境准备 本篇讲解Mybati数据CRUD数据操作之多条件查询 1&#xff0c;编写接口方法 在 com.itheima.mapper 包写创建名为 BrandMapper 的接口。在 BrandMapper 接口中定义多条件查询的方法。 而该功能有三个参数&#xff0c;…