题目链接
题解
还是挺妙的
一套牌只能用一张Joker,那么贪心是不对的
若能够组成k套牌,那么joker一定有种方法在k套牌中出现<=1次
那么,二分套数,检验joker够不够用
代码
/*
还是挺妙的
若能够组成k套牌,那么joker一定有种方法在k套牌中出现<=1次
那么
二分套数,检验joker够不够用
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
inline int read() {
int x = 0,f = 1;
char c = getchar();
while ( c < '0' || c > '9')c = getchar();
while(c <= '9' &&c >= '0')x = x*10 + c- '0',c = getchar() ;
return x ;
}
int n,m;
int c[79];
bool check(int x) {
int ned = std::min(x,m);
int mx = 0,cmx= 0 ;
for(int i = 1;i <= n;++ i) {
if(c[i] < x) ned -= x - c[i];
if(ned < 0) return false;
}
return true;
}
int main() {
n = read(),m = read();
for(int i = 1;i <= n;++ i) c[i] = read();
int l = 0,r = 1000000007;
int ans = 0;
while(l <= r) {
int mid = l + r >> 1;
if(check(mid)){ ans = mid;l = mid + 1; }
else r = mid- 1;
}
printf("%d
",ans);
return 0;
}