[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);
}