//扑克牌
//二分
#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;
}
> 请在这里输入引用内容