题意:有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;
}

京公网安备 11010502036488号