90分求调
查看原帖
90分求调
935689
LiGaYb楼主2025/7/27 19:26
#include <cstdio>
const int maxn = 1e6 + 5;
int n, k, a[maxn];
bool check(long long s) {
    long long sum = 0;
    for (int i = 1; i <= n; i++) {
        if (a[i] <= s) {
            sum += s - a[i] + 1;
            if (sum > s * k) return false;
        }
    }
    return sum <= s * k;
}
int main() {
    scanf("%d %d", &n, &k);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    // 二分实现高效查找 s 的最大自然数值
    long long l = 0, r = 2e12, ans = 0;
    while (l <= r) {
        long long mid = (l + r) / 2;
        if (check(mid)) {
            ans = mid;
            l = mid + 1;
        } else {
            r = mid - 1;
        }
    }
    printf("%lld\n", ans);
    return 0;
}
~其实我是 100 分~
2025/7/27 19:26
加载中...