有个问题
查看原帖
有个问题
1274368
YQD_Q楼主2024/7/2 19:37

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有差别,为什么会差那么多

2024/7/2 19:37
加载中...