//扑克牌
//二分
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
ll m;
ll c[52];
bool pd(ll t)
{
ll cnt=0;//计算凑t套牌需多少张小丑牌
for(int i=1;i<=n;i++)
{
if(c[i]<t) cnt+=t-c[i];//如果当前牌的数量小于t,要补的小丑牌数量就是连两者的差值
}
if(cnt>m||cnt>t) return false;//如果当前所需小丑牌大于套数说明一套牌里两张小丑牌,当然大于最多的小丑牌数也不行
else return true;
}
int main()
{
scanf("%d %lld",&n,&m);
for(int i=1;i<=n;i++) {cin>>c[i];}
ll l=1,r=500000000;//右边界最大是小丑牌用完+最多数量的那张牌(全不用小丑牌)
while(l<=r)
{
ll mid=(l+r)>>1;
if(pd(mid)) {l=mid+1;}
else r=mid-1;
}
cout<<r<<endl;
}
> 请在这里输入引用内容