此题的关键在于对批次这个概念的理解是否到位
在写出下面这段代码之前,我对批次的实现定位为循环次数 => O(k*n)
换个角度去思考,可以理解成同一分数段可录取人数 => O(1)
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int n, k, s;
cin >> n >> k >> s;
int count = 0;
unordered_map<int, int> map;
while(n--) {
int score, pta;
cin >> score >> pta;
// 满足基本条件 有加分项的同学单独考虑 => 这个思考角度很巧妙 也符合现实生活
if(score >= 175) {
if(pta >= s) count++;
else {
map[score]++;
if(map[score] && map[score] > k) map[score] = k;
}
}
}
for(auto [score, amount] : map) {
count += amount;
}
cout << count;
return 0;
}