AC代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[1000001],ans;
int f(int id){
int op=0;
for(int i=1;i<=n;i++){
if(a[i]<=id) continue;
op+=a[i]-id;
}
return op;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int l=1,r=2*1e9;
while(l<=r){
int mid=(l+r)/2;
ans=f(mid);
if(ans<m) r=mid-1;
else l=mid+1;
}
cout<<l-1;
}
10分代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[1000001],ans;
int f(int id){
int op=0;
for(int i=1;i<=n;i++){
if(a[i]<=id) continue;
op+=a[i]-id;
}
return op;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int l=1,r=2*1e9;
while(l<=r){
int mid=(l+r)/2;
ans=f(mid);
if(ans<=m) r=mid-1;
else l=mid+1;
}
cout<<l;
}
只是在二分的if和cout有差别,为什么会差那么多