[BZOJ1816][CQOI2010]扑克牌

解析

看到 \(n\) 很小, \(C_i\) 很大,多半是二分。

考虑二分牌数,检查 joker 能否补齐其他的缺少部分

const int maxn = 60;

int c[maxn], n, m, l = 0, r = 0x3f3f3f3f, mid;

bool check(int val) {
    int sum = 0;
    forn(i, n) {
        sum += max(val - c[i], 0);
        if (sum > val || sum > m) return 0;
    }
    return 1;
}

int main() {
    read(n), read(m);
    forn(i, n) read(c[i]);
    while (l < r) {
        if (check(mid = (l + r + 1) >> 1)) l = mid; else r = mid - 1;
    }
    printf("%d", l);
}

猜你喜欢

转载自www.cnblogs.com/Alessandro/p/9748185.html
今日推荐