题意:有n种牌,每种牌有ci张,还有m张万能的joker牌,每一套牌可以用一张joker牌代替任意一张牌,求最多能组成多少套牌?

思路:二分求最大值,因为能组成k套牌则必能组成(k-1)套牌。是否能组成k套牌,首先我们最多用min(m,k)张万能牌,用万能牌补数目少于k的牌,最后看万能牌是否够用。

代码:

#include<bits/stdc++.h>
#define ll long long
#define inf 100000000

using namespace std;

int n, m, c[1005];

bool fun(int k)
{
    ll p=min(m,k);
    for(int i=0;i<n;i++)
    {
        if(c[i]<k)
        {
            p=p-(k-c[i]);
        }
    }
    if(p<0)
    {
        return 0;
    }
    else
    {
        return 1;
    }
}

int erfen(int l,int r)
{
    while(r-l>1)
    {
        int z=(r+l)/2;
        if(fun(z))
        {
            l=z;
        }
        else
        {
            r=z;
        }
    }
    return l;
}

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&c[i]);
    }
    int z=erfen(0,1000000007);
    cout << z << endl;
    return 0;
}