前言

date: 8.21

今天也好忙好忙~~~
题目: 1012 The Best Rank(25分)

汇总文章 每日一题系列_算法提升

题解

按照总分,语文,数学,英语(该顺序有讲究),每次排个序,然后看看当前学生名次,若比之前好则更新该生最好排名rank变量和subject科目。

最后一次可以用map表映射一下,方便从id映射到下标。

这里有个大坑点,就是并列的话名次一样… 可是我咋没看见有说, 不知是不是看漏了。

#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;struct Stu{string id;       // 编号 int grade[4];    // 总分, 语文, 数学. 英语 int rank;      // 排名 char subject;  // 科目
};int cmpType = 0;
char subjectLt[] = {'A', 'C', 'M', 'E'};bool cmp(const Stu& a, const Stu& b) {return a.grade[cmpType] > b.grade[cmpType];
}int main() {int n, m;unordered_map<string, int> id2index;string str;cin >> n >> m;Stu stu[n + 1];for (int i = 1; i <= n; i++) {cin >> stu[i].id >> stu[i].grade[1] >> stu[i].grade[2] >> stu[i].grade[3];stu[i].grade[0] = stu[i].grade[1] + stu[i].grade[2] + stu[i].grade[3];stu[i].rank = n + 100; // 搞个不可能还更差的名次 }for (int sub = 0; sub < 4; sub++) {cmpType = sub;sort(stu + 1, stu + n + 1, cmp);int lastRank = 1, rank = 1; // lastRank保留上一次排名for (int i = 1; i <= n; i++) {if (i > 1 && stu[i].grade[sub] == stu[i - 1].grade[sub]) {rank = lastRank;} else {rank = i;lastRank = i;}// 判断是否是当前学生的最佳科目('ACME')if (rank < stu[i].rank) {stu[i].rank = rank;stu[i].subject = subjectLt[sub]; }// 第三次可以做个映射,提高后续查找效率if (sub == 3)id2index[stu[i].id] = i;}}for (int i = 1; i <= m; i++) {cin >> str;if (id2index.find(str) == id2index.end())cout << "N/A" << endl;elsecout << stu[id2index[str]].rank << " " << stu[id2index[str]].subject << endl;}
}

每日一题_模拟_1012 The Best Rank相关推荐

  1. 每日一题_贪心_55_跳跃游戏

    前言 date: 8.10 今天终于早起了,困困困~~~ 题目来源: 55. 跳跃游戏(leetcode) 汇总文章 每日一题系列_算法提升 题目 题解 遍历一遍数组,并维护一个最右可到达边界的变量. ...

  2. AcWing 1671. 三角形 (春季每日一题 暴力模拟)

    Farmer John 想要给他的奶牛们建造一个三角形牧场. 有 NN 个栅栏柱子分别位于农场的二维平面上不同的点 (X1,Y1)-(XN,YN)(X1,Y1)-(XN,YN). 他可以选择其中三个点 ...

  3. 每日一题——判断素数

    哈喽大家好,我是保护小周ღ,本期为大家带来的是编程实现输入一个数判断他是否为素数,博主将使用2种方法解答此题,一起来看看有没有大家平时使用的方法啊~ 题目: 从键盘输入一个整数,判断该数是否素数.素数 ...

  4. 【寒假每日一题】AcWing 4510. 寻宝!大冒险!

    目录 一.题目 1.原题链接 2.题目描述 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 一.题目 1.原题链接 4510. 寻宝!大冒险! - AcWing题库 2.题目描述 暑假要到了 ...

  5. 每日一题:1894.找到需要补充粉笔的学生编号 简单的模拟题目,注意求余的技巧!...

    1894.找到需要补充粉笔的学生编号 https://leetcode-cn.com/problems/find-the-student-that-will-replace-the-chalk/ 难度 ...

  6. linux scrapy 定时任务_写爬虫一定要会scrapy?-Python每日3题(爬虫专题)

    这里是Python7编程挑战-爬虫专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一道 ...

  7. 每日一题吧算是,见证自己的成长路程_(:з」∠)_

    目录 前言: 一.整理思路: 1.照明范围: 2.明亮空地的数组思想转化: 2.1: 2.2: 二.代码的实现和细节讲解: 1.变量的定义和含义: 2.火把照明的实现: 3.萤石照明的实现 : 4.对 ...

  8. Leetcode 每日一题双题版(2.25+2.24)模拟练细节

    Leetcode 每日一题双题版(2.25+2.24)模拟练细节 前言 刚刚敲了今天刷新的题目,然后昨天的也写了,就想着更新一下blog 两道题都是模拟题,对于模拟,我的看法就是看懂题目,拿捏细节,难 ...

  9. 2020年上海市高等学校信息技术水平考试试卷_三级_数据科学技术及应用_模拟卷_四、操作题_答案

    2020年上海市高等学校信息技术水平考试试卷_三级_数据科学技术及应用_模拟卷_四.操作题_答案 (本试卷考试时间 150 分钟) 答案是自己做的,经验证,可成功运行. 内容仅供学习交流,不可转载. ...

最新文章

  1. Lua截取utf-8编码的中英文混合字符串
  2. 快速使用wordpress
  3. CentOS 搭建svn服务器
  4. C/S框架-发布和部署WebService
  5. java 输出ab_一道在知乎很火的 Java 题——如何输出 ab【转】
  6. 数据竞赛入门-金融风控(贷款违约预测)三、特征工程
  7. 在create-react-app的脚手架里面使用scss
  8. 【数据分析学习】016-numpy数据结构
  9. javascript--this机制
  10. 原理解析!传智播客java基础入门第二版课后答案
  11. 《数据挖掘概念与技术》第八章 分类:基本概念
  12. Ubuntu18.04安装中文字体SimHei
  13. 【JY】构件配筋计算笔记汇总(入门)
  14. qq空间个人档html代码,QQ空间如何进行个人档管理?
  15. 怎么去除视频字幕清理视频字幕或水印的四种方法
  16. 构词法重新辨析triweekly与entrance
  17. Java工程师 Java基础面试题集合类(Day06)
  18. android 编译
  19. 158. 精读《Typescript 4》
  20. 211毕业生3天被辞退:offer不等于工作稳了!

热门文章

  1. 从360doc转入csdn博客
  2. CSS / text-shadow阴影效果
  3. 研报精选230428
  4. base64decode用法
  5. cmd 运行不要显示黑色窗口
  6. 【数据库应用-1】——CDA
  7. Java异常:RuntimeException和Exception的区别
  8. linux sigpipe信号,Linux下SIGPIPE信号及其处理
  9. 年龄到底怎么算才对_女人怎么样才算老?年龄不是标准,要看这四点特征,希望你没有!...
  10. VS WinExec 打开cmd执行命令