二分答案 砍树
原题链接:70056.笔记2025-12-21 14:27:07
发布于:广东
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int a[N];
int n,m;
int main(){
cin >> n >> m;
int l=0,r=0;//找刚刚分析题目得到的锯木机高度的可能
for(int i=1;i<=n;i++){
cin >> a[i];
r = max(r,a[i]);//最高就是最高的树,刚好0米木材需要
}
int h;//求的锯木机高度
while(l<=r){
int mid = (l+r)/2;//找个就是我们要举例的高度
long long sum = 0; //1
for(int j=1;j<=n;j++){ //2
if(a[j]>mid){//3
sum += a[j] - mid;//4
} //5
} //6 这6部分是在计算得到多少木材
if(sum>=m){ //如果得到的大于m
h = mid; //高度
l = mid + 1;//抬高锯木机的高度
//去尝试能不能在高一点
}else{
r = mid - 1;//降低锯木机
}
}
cout << h;
return 0;
}
这里空空如也








有帮助,赞一个