模板题
二分答案+检验
选择Cimax+mmax作为右界,即1e9
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,m;
int c[55];
bool juage(int x){
ll sum = 0;
for(int i = 1;i <= n;i++)
if(c[i] < x) sum += (x - c[i]);
return (sum <= m && sum <= x);
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int l = 1,r = 1e9,temp = 0;
cin>>n>>m;
for(int i = 1;i <= n;i++){
cin>>c[i];
temp = max(temp,c[i]); //维护序列中的最大值
}
//边界处理
if(!temp){
if(!m) cout<<0;
else cout<<m;
return 0;
}
//二分答案+检验
while(l <= r){
int mid = l + (r - l)/2;
if(juage(mid)) l = mid + 1;
else r = mid - 1;
}
cout<<l - 1;
return 0;
}