扑克牌
[CQOI2010]扑克牌
https://ac.nowcoder.com/acm/problem/19916
//扑克牌 //二分 #include <bits/stdc++.h> using namespace std; typedef long long ll; int n; ll m; ll c[52]; bool pd(ll t) { ll cnt=0;//计算凑t套牌需多少张小丑牌 for(int i=1;i<=n;i++) { if(c[i]<t) cnt+=t-c[i];//如果当前牌的数量小于t,要补的小丑牌数量就是连两者的差值 } if(cnt>m||cnt>t) return false;//如果当前所需小丑牌大于套数说明一套牌里两张小丑牌,当然大于最多的小丑牌数也不行 else return true; } int main() { scanf("%d %lld",&n,&m); for(int i=1;i<=n;i++) {cin>>c[i];} ll l=1,r=500000000;//右边界最大是小丑牌用完+最多数量的那张牌(全不用小丑牌) while(l<=r) { ll mid=(l+r)>>1; if(pd(mid)) {l=mid+1;} else r=mid-1; } cout<<r<<endl; } > 请在这里输入引用内容