这题我们可以推出来是单调的 所有就可以用二分来写
check函数就是判断joker能不能补完缺少的和是否会造成有两个joker在一套牌里面
代码有详细注释

#include <bits/stdc++.h>
#define ll long long
const int N=55;
using namespace std;
ll n,m,a[N];
bool check(ll mid){
    ll tmp=min(mid,m);///防止补的joker比套数还多  说明一套有两个joker
    for(int i=1;i<=n;i++){
        tmp-=max(mid-a[i],0ll);///小于套数的数要用joker来补
        if(tmp<0) return 0;///joker不够补了
    }
    return 1;
}

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    ll l=1,r=1e9,ans;
    while(l<=r){
        ll mid=(l+r)/2;
        if(check(mid)) ans=mid,l=mid+1;
        else r=mid-1;
    }
    cout<<ans<<endl;
    return 0;
}