此题的关键在于对批次这个概念的理解是否到位
在写出下面这段代码之前,我对批次的实现定位为循环次数 => O(k*n)
换个角度去思考,可以理解成同一分数段可录取人数 => O(1)
- #include
- #include
- 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;
- }