洛谷U611548 助教的比拼

题目

思路

代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 9;
using ll = long long; // 用long long避免整数溢出

int main() {
    // 关闭同步流,加速cin/cout
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    
    ll n, m;
    cin >> n >> m; // n: ZQH组人数, m: QWH组平均分
    ll sum = 0;    // 记录ZQH组当前总分
    ll x, y;       // x: 学员当前分数, y: 单次可提升分数
    
    // 大顶堆:优先选单次能提升最多分的学员(贪心策略)
    priority_queue<pair<ll, ll>> pq;

    for (int i = 1; i <= n; i++) {
        cin >> x >> y;
        sum += x; // 累加当前总分
        // 若提升后超过100,修正为最多能提升到100的分数
        if (x + y > 100)
            y = 100 - x;
        // 堆中存:{单次可提升分数, 当前分数}
        pq.push({y, x});
    }

    // 特殊情况1:QWH平均分是100,无法超过,输出-1
    if (m == 100) {
        cout << -1 << '\n';
        return 0;
    }

    // 特殊情况2:当前总分已经超过m*n(当前平均分已超QWH),输出0
    if (m * n < sum) {
        cout << 0 << '\n';
        return 0;
    }

    ll ans = 0; // 记录需要的辅导次数
    while (!pq.empty()) {
        // 取当前能提升最多分的学员
        auto [y_curr, x_curr] = pq.top();
        pq.pop();
        
        ans++;               // 辅导次数+1
        sum += y_curr;       // 总分增加本次提升的分数
        x_curr += y_curr;    // 该学员的新分数
        
        // 计算该学员下次最多能提升的分数(不能超过100)
        if (x_curr + y_curr > 100)
            y_curr = 100 - x_curr;
        
        pq.push({y_curr, x_curr}); // 把更新后的学员放回堆中

        // 当总分超过m*n(平均分超过QWH),结束循环
        if (sum > m * n)
            break;
    }

    cout << ans << '\n';
    return 0;
}

视频讲解

视频链接

相关推荐
W23035765731 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
.Ashy.1 小时前
2026.4.11 蓝桥杯软件类C/C++ G组山东省赛 小记
c语言·c++·蓝桥杯
minji...2 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
语戚3 小时前
力扣 968. 监控二叉树 —— 贪心 & 树形 DP 双解法递归 + 非递归全解(Java 实现)
java·算法·leetcode·贪心算法·动态规划·力扣·
skywalker_113 小时前
力扣hot100-7(接雨水),8(无重复字符的最长子串)
算法·leetcode·职场和发展
bIo7lyA8v4 小时前
算法稳定性分析中的输入扰动建模的技术9
算法
CoderCodingNo5 小时前
【GESP】C++三级真题 luogu-B4499, [GESP202603 三级] 二进制回文串
数据结构·c++·算法
sinat_286945195 小时前
AI Coding 时代的 TDD:从理念到工程落地
人工智能·深度学习·算法·tdd
炽烈小老头5 小时前
【 每天学习一点算法 2026/04/12】x 的平方根
学习·算法