[CQOI2010]扑克牌
[CQOI2010]扑克牌
https://ac.nowcoder.com/acm/problem/19916
题意:有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; }