#include<bits/stdc++.h>
using namespace std;
int n,m;//树木的数量,长度
int a[100010];//每棵树的高度
bool check(int h)//h要修剪的长度
{
int res=0;
for(int i=0;i<n;i++)
{
if(a[i]>h)//这一不的作用是筛选比要修剪的长度高的树 开始丢了这一步
res+=a[i]-h;//累计修剪的长度
if(res>=m)//是否大于规定值
return true;
}
return false;
}
int main()
{
int ans;
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int l=0,r=1e9;
while(l<=r)
{
int mid=(l+r)>>1;
if(check(mid))
{
ans=mid;//将mid的结果赋值给mid
l=mid+1;
}
else
r=mid-1;
}
cout<<ans<<endl;
return 0;
}
砍树[二分]c++
本文介绍了一个C++程序,通过二分查找算法找到满足条件的最小修剪长度,使得剩余树木的总高度不超过规定值。程序定义了输入树木数量和长度,以及修剪长度限制,通过比较和调整区间来找到最优解。
摘要由CSDN通过智能技术生成