二分新手求带 代码2、3、4、8、9、10不通过
查看原帖
二分新手求带 代码2、3、4、8、9、10不通过
993122
xiaorunrun520楼主2023/5/29 23:29

新手初入二分,代码还写得很烂,大佬轻喷

#include <bits/stdc++.h>
using namespace std;
long long a[1000001],M,maxx = 0;
int N;
int cut(long long mid){
	long long total = 0;
	for(int i = 1;i<=N;i++){
		if(a[i]>mid) total += a[i]-mid;//计算总长度
	}
	return total;
}
int main(){
	cin>>N>>M;
	for(int i = 1;i<=N;i++){
		cin>>a[i];
		maxx = max(maxx,a[i]);  //找到最大值
	}
	long long L = 1,R = maxx,mid=0;
	while(L<=R){     //开始二分
		mid = (L+R)/2;
		long long total = 0;
		if(cut(mid) == M) break;  //刚好满足
		else if(cut(mid) > M) L = mid+1;
		else R = mid - 1;
		}
	cout<<mid;
	return 0;
}
2023/5/29 23:29
加载中...