头像

欢迎来到我的博客

分享题解与总结

P1873砍树

image

思路:
二分答案
1.最优解
2.锯片的高度越高,获得的木材总数越少——单调性

向右找
1.初始化l=0(考虑有全部砍光的情形),r=max(h[i])
2.check函数判断当前锯片高度mid下,是否能得到M米的木材(遍历数组,计算差值即可)
3.记得开long long。

#define MAXN 1000005
using ll=long long;
ll n,m,h[MAXN],l,r,mid;

bool check(ll x){
	ll cnt=0;
	for(int i=1;i<=n;++i){
		if(h[i]>x)
			cnt+=h[i]-x;
	}
	return cnt>=m;
}

int main()
{
	cin>>n>>m; 
	for(int i=1;i<=n;++i){
		scanf("%lld",&h[i]);
		r=max(r,h[i]);
	}
	l=0;
	while(l<r){
		mid=(l+r+1)/2;
		//cout<<"l,r,mid:"<<l<<","<<r<<","<<mid<<'\n';
		if(check(mid))
            l=mid;
		else
            r=mid-1;
	}
	cout<<r;
	return 0;
} 
posted @ 2026-02-10 20:07  king_steph1209  阅读(8)  评论(0)    收藏  举报