PAT甲级-1012 The Best Rank

news2024/12/29 9:22:00

题目

 

题目大意

学生有C、M、E三个成绩,A是这三个成绩的平均值。要求对每个学生的C、M、E、A分别排名,取这4项的最高排名为最优排名。如果一个学生有多项排名一样,按照A > C > M > E的优先级输出最优排名。

输入给出学生人数和查询人数,以及学生信息和需要查询的id。要求输出每个查询的最优排名及对应的科目,如果在学生信息中找不到要查询的id,就输出N/A。

思路

定义结构体,录入信息。再按照A C M E分别进行排序,用以学生id为键,以各科排名为值(字符串形式)的map存储排序结果,找到单科成绩的排名。之后再对应查询数组遍历map,找到每个学生对应的最优排名。注意如果不同学生的成绩相同,那么排名也必须相同,按照“1 1 1 4 5”这样的排名方式。

代码

#include <iostream>
#include <map>
#include <vector>
#include <cctype>
#include <algorithm>
using namespace std;

struct Stu{
    int id;
    int c;
    int m;
    int e;
    int a;
};  // 定义一个学生结构体

bool cmpa(Stu stu1, Stu stu2){
    return stu1.a > stu2.a;
}
bool cmpc(Stu stu1, Stu stu2){
    return stu1.c > stu2.c;
}
bool cmpm(Stu stu1, Stu stu2){
    return stu1.m > stu2.m;
}
bool cmpe(Stu stu1, Stu stu2){
    return stu1.e > stu2.e;
}  // 自定义排序规则

int main(){
    int n, m;
    cin >> n >> m;
    vector<Stu> stu(n);
    for (int i = 0; i < n; i++){
        cin >> stu[i].id >> stu[i].c >> stu[i].m >> stu[i].e;
        stu[i].a = (stu[i].c + stu[i].m + stu[i].e) / 3;
    }
    vector<int> res(m);
    for (int i = 0; i < m; i++){
        cin >> res[i];
    }

    map<int, string> mp;
    sort(stu.begin(), stu.end(), cmpa);
    int k;
    for (int i = 0; i < n; i++){
        if (i == 0){
            mp[stu[i].id] += '1';
            k = 1;
        }else{
            if (stu[i].a == stu[i-1].a){
                mp[stu[i].id] += k + '0';
            }else{
                mp[stu[i].id] += i + 1 + '0';
                k = i + 1;
            }
        }
        mp[stu[i].id] += 'A';
    }  // 对A排名
    sort(stu.begin(), stu.end(), cmpc);
    for (int i = 0; i < n; i++){
        if (i == 0){
            mp[stu[i].id] += '1';
            k = 1;
        }else{
            if (stu[i].c == stu[i-1].c){
                mp[stu[i].id] += k + '0';
            }else{
                mp[stu[i].id] += i + 1 + '0';
                k = i + 1;
            }
        }
        mp[stu[i].id] += 'C';
    }  // 对C排名
    sort(stu.begin(), stu.end(), cmpm);
    for (int i = 0; i < n; i++){
        if (i == 0){
            mp[stu[i].id] += '1';
            k = 1;
        }else{
            if (stu[i].m == stu[i-1].m){
                mp[stu[i].id] += k + '0';
            }else{
                mp[stu[i].id] += i + 1 + '0';
                k = i + 1;
            }
        }
        mp[stu[i].id] += 'M';
    }  // 对M排名
    sort(stu.begin(), stu.end(), cmpe);
    for (int i = 0; i < n; i++){
        if (i == 0){
            mp[stu[i].id] += '1';
            k = 1;
        }else{
            if (stu[i].e == stu[i-1].e){
                mp[stu[i].id] += k + '0';
            }else{
                mp[stu[i].id] += i + 1 + '0';
                k = i + 1;
            }
        }
        mp[stu[i].id] += 'E';
    }  // 对E排名

    for (int i = 0; i < m; i++){
        int flag = 0;
        for (auto it = mp.begin(); it != mp.end(); it++){
            if (it->first == res[i]){
                flag = 1;
                string s = it->second;
                int min = 3000;
                int pos;
                for (int j = 0; j < (int)s.size(); j++){
                    if (isdigit(s[j]) && min > s[j]){
                        min = s[j];
                        pos = j;
                    }
                }
                cout << s[pos] << " " << s[pos + 1] << endl;
            }
        }
        if (flag == 0){
            cout << "N/A" << endl;
        }
    }  // 找到最优排名并输出结果

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2129792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

派遣函数-编写一个更通用的派遣函数

前面介绍的派遣函数处理过于简单&#xff0c;下面带领读者对派遣函数一步步进行扩充。首先介绍一个重要数据结构--IO_STACK LOCATION,即I/O堆栈,这个数据结构和IRP紧密相连。 在前面&#xff0c;曾经介绍过驱动程序的层次结构。驱动对象会创建一个个的设备对象&#xff0c; 并将…

前端单独实现 vue 动态路由

前端单独实现 vue 动态路由 Vue 动态路由权限是指在 Vue 应用程序中&#xff0c;根据用户的权限动态生成和控制路由的行为。这意味着不是所有的路由都在应用启动时就被硬编码到路由配置中&#xff0c;而是根据用户的权限信息&#xff0c;在运行时动态地决定哪些路由应该被加载…

3. 轴指令(omron 机器自动化控制器)——>MC_PowerMC_MoveJog

机器自动化控制器——第三章 轴指令 1 MC_Power变量▶输入变量▶输出变量▶输入输出变量 功能说明▶时序图▶重启运动指令▶多重启动运动指令▶错误代码 MC_MoveJog变量▶输入变量▶输出变量▶输入输出变量 功能说明▶时序图▶重启运动指令▶多重启动运动指令▶异常 MC_Power …

从0书写一个softmax分类 李沐pytorch实战

输出维度 在softmax 分类中 我们输出与类别一样多。 数据集有10个类别&#xff0c;所以网络输出维度为10。 初始化权重和偏置 torch.norma 生成一个均值为 0&#xff0c;标准差为0.01,一个形状为size(num_inputs, num_outputs)的张量偏置生成一个num_outputs 10 的一维张量&a…

1265:【例9.9】最长公共子序列 动态规划

题目链接 题目&#xff1a; 思路 最长-最值问题、重叠子问题、最优结构-前面序列的公共序列最优值是后续序列的子问题、无后效性也满足 确定状态、变量&#xff1a;序列是没有要求要连续&#xff0c;因此只能用长度为i的串a分别和长度为&#xff08;1-j&#xff09;串b去找最值…

【Linux】:信号与信号产生

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来信号和信号的产生相关代码和知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到…

HarmonyOS开发实战( Beta5.0)日历切换案例实践详解

鸿蒙HarmonyOS开发往期必看&#xff1a; HarmonyOS NEXT应用开发性能实践总结 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; 介绍 本示例介绍使用Swiper实现自定义日历月视图和周视图左右滑…

反编译app

反编译代码步骤&#xff1a; 1.用dex2jar 将apk打成jar&#xff0c;d2j-dex2jar your-app.apk GitHub - pxb1988/dex2jar: Tools to work with android .dex and java .class filesTools to work with android .dex and java .class files - pxb1988/dex2jarhttps://github.co…

注解实现json序列化的时候自动进行数据脱敏

最近在进行开发的时候遇到一个问题&#xff0c;需要对用户信息进行脱敏处理&#xff0c;原有的方式是写一个util类&#xff0c;在需要脱敏的字段查出数据后&#xff0c;显示掉用方法处理后再set回去&#xff0c;觉得这种方式能实现功能&#xff0c;但是不是特别优雅&#xff0c…

机器学习特征分析

机器学习的常规流程 在真正进入机器学习算法之前&#xff0c;数据准备和处理过程会尤为重要&#xff0c;这直接关系到后续模型的效果和最终的业务判决。 数据分析 什么是数据分析 数据分析指对原始数据进行检查、清理、转换及筛选等一系列动作&#xff0c;找到数据对结果的影…

Qwen1.5模型文本分类微调实战教程

大家好啊!今天咱们来聊聊怎么给大语言模型"调教"一下&#xff0c;让它在文本分类这个任务上玩得更溜。具体来说&#xff0c;我们要用Qwen1.5这个模型来做文章。别看这活儿听着高大上&#xff0c;其实做起来也没那么难。跟着我来&#xff0c;保证让你轻松上手! 咱们这…

How to fool AI content detectors?

Add prompt below: Make it sound like a tweed jacket wearing professor taking to a group of 20 years old students. Vary the sentences length. Make it persoanl, add a touch of humor. Make the blog post sound unique when compared to Other blog posts.

MySQL--库的操作

文章目录 1.创建数据库2.创建数据库案例3.字符集和校验规则3.1默认字符集3.2默认校验规则3.3查看系统默认字符集以及校验规则3.4查看数据库支持的字符3.5查看数据库支持的字符集校验规则3.6校验规则对数据库的影响不区分大小写查询&#xff1a;排序结果&#xff1a;区分大小写查…

BFS广度优先搜索和DFS深度优先搜索解决迷宫问题

前言 BFS广度优先搜索和DFS深度优先搜索解决迷宫问题 迷宫问题 原题目&#xff1a;迷宫由n行m列的单元格组成(n,m都小于等于50)&#xff0c;每个单元格要吗是空地要吗是障碍物。现在请你找到一条从起点到终点的最短路径长度。 分析 BFS广度优先搜索 首先我们将起点入队&a…

iOS 18 RC 版本更新,为相机应用引入了“暂停录制视频”功能

苹果公司9月10日正式向全球iPhone用户推送了iOS 18 Release Candidate&#xff08;RC&#xff09;版本。这一版本的发布不仅标志着iOS系统的又一次重大更新&#xff0c;更预示着苹果在提升用户体验、增强隐私保护以及推动AI应用方面的持续努力。 并且此次苹果公司最新推出的 i…

Unity基本操作

API手册 Unity 脚本 APIhttps://docs.unity.cn/cn/2022.3/ScriptReference/index.html 在遇到不懂的方法、想更深入的学习或者是想查看是否有相应的方法实现某项功能&#xff0c;可以在Unity官方这里查看脚本。以Transform为例&#xff0c;可以直接搜索&#xff0c;或者在Unit…

9月12日 QT

//设置图片缩放适应label ui->label->setScaledContents(true); // 在spinbox后方设置$特殊符号 ui->spinBox->setSuffix(" 斤"); //给肉类combobox加入项目 QStringList Meat_List{"请选择&quo…

数据放到GPU上,运行程序卡住检查方法

这个问题一定是要结合具体的代码&#xff0c;下面就自己遇到问题&#xff0c;询问chatGPT后发现问题所在的过程进行记录&#xff0c;当然绝大部分情况下都是batch_size设置太大了&#xff0c;显卡内存不足导致 部分重点代码&#xff1a; 导入模型部分略 #自定义数据集有关类 c…

无人机 PX4 飞控 | EKF2简介与使用方法

无人机 PX4 飞控 | EKF2简介与使用方法 PX4 EKF2简介EKF 的启动ecl EKF 的优缺点缺点优点 运行单个EKF实例运行多个EKF实例 PX4 EKF2简介 PX4是一个流行的开源飞控系统&#xff0c;广泛用于无人机和其他自动驾驶飞行器。EKF2&#xff08;Extended Kalman Filter 2&#xff09;…