二分答案。。。
然后用joker牌去补不够的。
完了。
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; int n,m,a[110]; bool check(int mid) { int s=min(m,mid); for(int i=1;i<=n;i++) { if(a[i]<mid) { s-=mid-a[i]; if(s<0)return false; } } return true; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&a[i]); int l=0,r=999999999,ans; while(l<=r) { int mid=(l+r)/2; if(check(mid)==true) { l=mid+1; ans=mid; } else r=mid-1; } printf("%d\n",ans); return 0; }