解题思路
有 种牌,第
种牌有
个,另有
个 joker 牌,求最多可以组成多少套牌?
一副套牌中包含 个牌,每个牌都不相同。
假设可以组成 副套牌,如果
,可由 joker 牌补充。需要补充的牌数总和应
。
使用二分法确定满足条件的 的最大值。
C++代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n, m;
bool cards(vector<int>& c, int x){
int tmp = min(m, x);
for(int i=0; i<n; ++i){
if(c[i] < x)
tmp -= x - c[i];
if(tmp < 0)
return false;
}
return true;
}
int main(){
cin >> n >> m;
vector<int> c(n);
for(int i=0; i<n; ++i)
cin >> c[i];
sort(c.begin(), c.end());
int left = c[0];
int right = c.back() + m / n;
int ans = left;
while(left <= right){
int mid = left + (right - left) / 2;
if(cards(c, mid)){
left = mid + 1;
ans = max(ans, mid);
}
else
right = mid - 1;
}
cout << ans << endl;
return 0;
} 
京公网安备 11010502036488号