Acowdemia (USACO Silver 2021 Open)

Acowdemia (USACO Silver 2021 Open)

N<105N\lt 10^5篇文章,K<105K \lt 10^5篇综述,每篇可以将LL篇文章的引用次数提升1。问指数hh最高是多少(指数hh的定义:至少有hh篇引用次数不少于hh

hh这样的定义,不太好直接求,但是容易验证,指向这可能是个二分答案的题目。我们试着验证一个hh是否可行:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
 
int n, k, l;
int c[100005];
 
bool check(int h) {
    ll r = (ll)k * l;
    for (int i = 0; i < h; i++) {
        if (c[i] + k < h) return false;
        if (c[i] < h)
            r -= (h - c[i]);
    }
    return r >= 0;
}
 
int main() {
    scanf("%d %d %d", &n, &k, &l);
    for (int i = 0; i < n; i++)
        scanf("%d", &c[i]);
    sort(c, c+n, greater<int>());
 
    int lo = 0, hi = n;
    while (lo < hi) {
        int mid = (lo + hi + 1) / 2;
        if (check(mid)) lo = mid;
        else hi = mid - 1;
    }
    printf("%d\n", lo);
    return 0;
}