这个过了
#include<iostream>
#include<cstdio>
using namespace std;
long long n, m;
int a[1000005];
long long sum, maxx=0;
long long add(int mid) {
long long s=0;
for(int i=1; i<=n; i++) {
if(a[i]>mid) s+=a[i]-mid;
}
return s;
}
long long search(int l, int r, long long s) {
while(l<=r) {
int mid=(l+r)/2;
if(add(mid)<m) r=mid-1;
else l=mid+1;
}
return r;
}
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
scanf("%d", &a[i]);
if(a[i]>maxx) maxx=a[i];
}
long long ans;
ans=search(0, maxx+1, sum);
cout<<ans;
return 0;
}
这个70pts
#include<iostream>
#include<cstdio>
using namespace std;
long long n, m;
int a[1000005];
long long sum, maxx=0;
long long add(int mid) {
long long s=0;
for(int i=1; i<=n; i++) {
if(a[i]>mid) s+=a[i]-mid;
}
return s;
}
long long search(int l, int r, long long s) {
while(l<r) {
int mid=(l+r)/2;
if(add(mid)<m) r=mid-1;
else l=mid+1;
}
return r;
}
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
scanf("%d", &a[i]);
if(a[i]>maxx) maxx=a[i];
}
long long ans;
ans=search(0, maxx+1, sum);
cout<<ans;
return 0;
}
区别在于search里的while的循环条件
不是很理解,按理来讲如果错的话怎么还有7个点是对的……