2022年天梯赛L1-8真题解析(哈希+排序)
L1-088 静静的推荐哈希表排序题目链接https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId1518582000729911296解题思路主要是通过哈希表排序来解决易错点这里题目说“如果有的学生天梯赛成绩虽然与前一个人相同但其参加过 PAT 考试且成绩达到了该企业的面试分数线则也可以接受。”指的应该是只要达到了就都接受不用管批次所以在处理这类条件的人的时候用while循环解题代码如下#include bits/stdc.h using namespace std; int main() { int N,K,S; cinNKS; int score,pat; unordered_mapint,int student;//key是分数 unordered_setint scores; unordered_mapint,int extra_num; for(int i0;iN;i){ cinscorepat; if(score175){ continue;//不考虑 } scores.insert(score); if(patS){ extra_num[score]; } else{ student[score]; } } int sum0; vectorint a_scores(scores.begin(),scores.end()); sort(a_scores.begin(),a_scores.end()); //哈希表要用pair结构排序 //本题就是分两类一类是普通学生一类是特殊学生 for(int h0;hK;h){ for(int i0;ia_scores.size();i){ int score_numa_scores[i]; if(student[score_num]0){ student[score_num]--; sum; } //他的意思是如果有很多学生也达到了这个要求的话也可以都报上去 while(extra_num[score_num]0){ extra_num[score_num]--; sum; } } } coutsumendl; return 0; }