[CQOI2010]扑克牌
[CQOI2010]扑克牌
https://ac.nowcoder.com/acm/problem/19916
二分答案.
对于答案可以保证是一个单调的函数,所以可以直接二分答案,然后对于二分的数字代入数组进行判断
判断每次二分后的答案是否合法
#include<bits/stdc++.h> using namespace std; typedef long long ll; int n,m; int a[200]; bool check(ll x) { ll cnt=0; for(int i=0;i<n;i++) if(a[i]<x) cnt+=x-a[i]; if(cnt>m||cnt>x) return 0; return 1; } int main() { cin>>n>>m; for(int i=0;i<n;i++) cin>>a[i]; int l=0,r=1e9; while(l<=r) { ll mid=(r+l)*1ll/2; if(check(mid)) l=mid+1; else r=mid-1; } cout<<r; }