题意
你有种牌,第
种牌的数目为
。另外有
张万能牌,万能牌可替换任何一张牌。
种牌各一张可以组成一套,每套最多使用万能牌一次,问最多能组成多少套。
思路
显然二分答案。对于最多使用万能牌一次,判断每次二分答案时,要使用万能牌的总数是否超过了当前的套数。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long ll;
const ll maxn = 1e6+5;
ll n,k;
ll a[maxn], b[maxn];
ll check(ll mid, ll k) {
ll ans=0;
for(ll i=0;i<n;i++) {
if(mid>a[i]) ans+=mid-a[i];
}
return ans<=min(k,mid);
}
int main() {
scanf("%lld%lld",&n,&k);
for(ll i=0;i<n;i++) scanf("%lld",&a[i]);
ll l=0,r=1e9,mid,ans=-1;
while(l<=r) {
mid=(l+r)>>1;
if(check(mid, k)) ans=max(ans,mid),l=mid+1;
else r=mid-1;
}
printf("%lld\n",ans);
} 
京公网安备 11010502036488号