AC代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m,l=0,r=1e9,ans=0,a[55];
bool check(int mid){
int sum=0;
for(int i=1;i<=n;i++){
sum+=max(0ll,mid-a[i]);
}
return sum<=min(m,mid);
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
while(l<=r){
int mid=(l+r)/2;
if(check(mid)){
l=mid+1;
ans=mid;
}else{
r=mid-1;
}
}
cout<<ans;
return 0;
}
60pts代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m,l=0,r=1e18,ans=0,a[55];
bool check(int mid){
int sum=0;
for(int i=1;i<=n;i++){
sum+=max(0ll,mid-a[i]);
}
return sum<=min(m,mid);
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
while(l<=r){
int mid=(l+r)/2;
if(check(mid)){
l=mid+1;
ans=mid;
}else{
r=mid-1;
}
}
cout<<ans;
return 0;
}
为什么上界开到1e18不行,但是1e9可以呢?