求问最后为啥减一
查看原帖
求问最后为啥减一
241817
Chancylaser楼主2021/10/10 23:12

二分萌新

这是我的ac代码

就是有点不明白最后为啥需要减一

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
long long n,m;
long long a[1000005];
bool check(long long x){
	long long ans=0;
	for(int i=1;i<=n;i++){
		if(a[i]>x)
			ans+=a[i]-x;
	}
	if(ans>=m)
		return 0;
	else
		return 1;
}
int main(){
	scanf("%lld%lld",&n,&m);
	long long l=1e9,r=0;
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		l=min(a[i],l);
		r=max(a[i],r);
	}
	sort(a+1,a+n+1);
	while(l<r){
		long long mid=(l+r)/2;
		if(check(mid))
			r=mid;
		else
			l=mid+1;
		if(l==r){
			printf("%lld\n",l-1);
			break;
		}	
	}
	return 0;
}
2021/10/10 23:12
加载中...