洛谷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;
}

视频讲解

视频链接

相关推荐
君义_noip2 小时前
信息学奥赛一本通 1661:有趣的数列 | 洛谷 P3200 [HNOI2009] 有趣的数列
c++·算法·组合数学·信息学奥赛·csp-s
程序员:钧念2 小时前
深度学习与强化学习的区别
人工智能·python·深度学习·算法·transformer·rag
英英_3 小时前
MATLAB数值计算基础教程
数据结构·算法·matlab
一起养小猫3 小时前
LeetCode100天Day14-轮转数组与买卖股票最佳时机
算法·leetcode·职场和发展
hele_two3 小时前
快速幂算法
c++·python·算法
OopspoO4 小时前
C++杂记——Name Mangling
c++
yuanmenghao4 小时前
车载Linux 系统问题定位方法论与实战系列 - 车载 Linux 平台问题定位规范
linux·运维·服务器·网络·c++
小羊羊Python4 小时前
SoundMaze v1.0.1正式发布!
开发语言·c++
l1t4 小时前
利用DeepSeek将python DLX求解数独程序格式化并改成3.x版本
开发语言·python·算法·数独
jllllyuz4 小时前
基于子集模拟的系统与静态可靠性分析及Matlab优化算法实现
算法·matlab·概率论