已过,一个问题
查看原帖
已过,一个问题
755327
AIMEE11楼主2024/6/16 22:20

这个过了

#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个点是对的……

2024/6/16 22:20
加载中...