PAT (Advanced Level) 1012 The Best Rank (25 分)
发布日期:2021-06-29 12:22:27
浏览次数:3
分类:技术文章
本文共 2505 字,大约阅读时间需要 8 分钟。
序:
经典结构体+排序,不同的是这次要排四个,具体的操作有些繁琐题目概述:
给出多个学生的各科成绩,当查询对应学生时,需要按一定的优先级输出该学生最高的排名以及对应的学科。分析:
1.结构体建立的不叫复杂,包括四个分数和四个排名 2.exist的建立,快速判断查询是否命中,以及快速定位查询的目标,而不用遍历。(相当于牺牲存储换取速度)//又来结构体+排序?//这次更复杂#includeusing namespace std;struct student{ int id; int c, m, e, a; int r1, r2, r3, r4; int bestr; char bestsub;}stu[2021];int exist[1000000];//快速判断是否有该id以及定位bool cmp1(student stu1, student stu2) { return stu1.c > stu2.c;}bool cmp2(student stu1, student stu2) { return stu1.m > stu2.m;}bool cmp3(student stu1, student stu2) { return stu1.e > stu2.e;}bool cmp4(student stu1, student stu2) { return stu1.a > stu2.a;}int main(){ int N, M, id; scanf("%d%d", &N, &M); //录入分数 for(int i = 0; i < N; i++) { scanf("%d", &stu[i].id); scanf("%d%d%d", &stu[i].c, &stu[i].m, &stu[i].e); stu[i].a = (stu[i].c + stu[i].m + stu[i].e) / 3 + 0.5;//四舍五入 } //c进行排名 sort(stu, stu + N, cmp1); stu[0].r1 = 1; for(int i = 1; i < N; i++) { if(stu[i].c == stu[i-1].c) stu[i].r1 = stu[i-1].r1; else stu[i].r1 = i + 1; } //m进行排名 sort(stu, stu + N, cmp2); stu[0].r2 = 1; for(int i = 1; i < N; i++) { if(stu[i].m == stu[i-1].m) stu[i].r2 = stu[i-1].r2; else stu[i].r2 = i + 1; } //e进行排名 sort(stu, stu + N, cmp3); stu[0].r3 = 1; for(int i = 1; i < N; i++) { if(stu[i].e == stu[i-1].e) stu[i].r3 = stu[i-1].r3; else stu[i].r3 = i + 1; } //a进行排名 sort(stu, stu + N, cmp4); stu[0].r4 = 1; for(int i = 1; i < N; i++) { if(stu[i].a == stu[i-1].a) stu[i].r4 = stu[i-1].r4; else stu[i].r4 = i + 1; } //得出每个人的最好排名和科目 for(int i = 0; i < N; i++) { stu[i].bestr = min(stu[i].r1, min(stu[i].r2, min(stu[i].r3, stu[i].r4))); if(stu[i].bestr == stu[i].r4) stu[i].bestsub = 'A'; else if(stu[i].bestr == stu[i].r1) stu[i].bestsub = 'C'; else if(stu[i].bestr == stu[i].r2) stu[i].bestsub = 'M'; else stu[i].bestsub = 'E'; exist[stu[i].id] = i + 1; } //进行查询 for(int i = 0; i < M; i++) { int query; scanf("%d", &query); int index = exist[query]; if(index) printf("%d %c\n", stu[index - 1].bestr, stu[index - 1].bestsub); else printf("N/A\n"); } return 0;}
总结:
1.复制相似的代码要注意改的仔细!!! 2.四舍五入加0.5 3.可以用exist优化查询以及快速查找(牺牲空间为代价)转载地址:https://bridge-killer.blog.csdn.net/article/details/115434039 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月02日 19时42分08秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
3dmax2012安装教程
2019-04-29
OC渲染器(Octane Render)整合版安装包 附安装教程
2019-04-29
操作系统期末大题复习
2019-04-29
hive:分区表,hbase外表
2019-04-29
想要成为运维,想要成为后期的架构师?这些知识是必备的!
2019-04-29
linux 是如何 快速一键安装禅道的呐?
2019-04-29
运维面试基础试题(四)
2019-04-29
一键安装Openstack单节点 必能成功
2019-04-29
面试紧张怎么办
2019-04-29
关系型数据库 ,nosql数据库简介
2019-04-29
Centos 7搭建NTP时间同步服务器
2019-04-29
centos7 基于rsync+inotify 实现定时备份
2019-04-29
指定IP进行 文件的分发
2019-04-29
基于http搭建本地yum仓库
2019-04-29
常规邮件基础
2019-04-29
邮件基础之 -- SMTP协议
2019-04-29
网络基础
2019-04-29
Java设计模式--责任链模式
2019-04-29
图像配准----SIFT
2019-04-29
向量叉积计算法
2019-04-29