原题传送门
二分+贪心
目标是组出
m
i
d
mid
mid副牌,所以有两个要求
- J O K E R JOKER JOKER不能不够
- J O K E R JOKER JOKER最多用 m i d mid mid张
Code:
#include <bits/stdc++.h>
#define maxn 110
#define int long long
using namespace std;
int n, m, a[maxn];
inline int read(){
int s = 0, w = 1;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;
for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);
return s * w;
}
bool check(int mid){
int tmp = m;
for (int i = 1; i <= n; ++i) if ((tmp -= max(0LL, mid - a[i])) < 0) return 0;
if (m - tmp > mid) return 0;
return 1;
}
signed main(){
n = read(), m = read();
int l = 0, r = 0, ans;
for (int i = 1; i <= n; ++i) r += a[i] = read();
while (l <= r){
int mid = (l + r) >> 1;
if (check(mid)) ans = mid, l = mid + 1; else r = mid - 1;
}
printf("%d\n", ans);
return 0;
}