2025-8-2

2025-8-2

codeforces-div2-512-B

题意描述

给定n桶\(v_i\)升的油, 恰好取出k升,最大化剩余油的最小值。

取不出k升输出-1.

思路分析

  • 贪心
    • 考虑最平均的情况且\(v_i\)较大,我们可以先取到全部相等,然后一个个取。
    • 答案为ans =\(\lfloor \frac{{\sum v_i }- k}{n} \rfloor\)
    • \(v_i < ans\)时更新答案为\(v_i\).

解题代码

void solve()
{   
    int n;ll k;
    cin >> n >> k;

    vector<int> a(n);
    for(int& x : a)cin >> x;
    
    ll s = accumulate(all(a), 0ll);
    if(s < k){
        cout << -1 << nl;
        return;
    }

    int ans = (s - k) / n;
    ans = min(ans, *min_element(all(a)));
    cout << ans << nl;
}
  • 时间复杂度o(n)
posted @ 2025-08-07 20:44  kodil  阅读(8)  评论(0)    收藏  举报