洛谷P1873 砍樹 題解 二分答案

2022-05-19 21:31:27 字數 620 閱讀 7256

首先,在已知砍伐高度 h 的情況下,我們可以直接求得能夠得到的木材總長度。

所以,我們可以開乙個函式bool check(int h),用於判斷在砍伐高度為 h 的情況下,得到的木材總長度是否 ≥ m;如果是,則返回 true ,否則,返回 false。

可以發現,隨著砍伐高度的上公升,得到的木材的數量肯定是減小的。所以存在乙個高度 h,使得當 h ≤ h 時,check(h)返回 true;當 h ≥ h+1 時,check(h)返回 false。

我們可以通過以 h 為自變數,以check(h)的結果為應變數進行二分,得到這個答案。

實現**如下:

#include using namespace std;

int n;

long long m, h[1000010];

bool check(int h)

return sum >= m;

}int main()

else r = mid-1;

}cout << res << endl;

return 0;

}

二分答案 洛谷P1873 砍樹

思路總結 伐木工人公尺爾科需要砍倒m公尺長的木材。這是乙個對公尺爾科來說很容易的工作,因為他有乙個漂亮的新伐木機,可以像野火一樣砍倒森林。不過,公尺爾科只被允許砍倒單行樹木。公尺爾科的伐木機工作過程如下 公尺爾科設定乙個高度引數h 公尺 伐木機公升起乙個巨大的鋸片到高度h,並鋸掉所有的樹比h高的部分...

P1873 砍樹 二分

題目描述 伐木工人公尺爾科需要砍倒m公尺長的木材。這是乙個對公尺爾科來說很容易的工作,因為他有乙個漂亮的新伐木機,可以像野火一樣砍倒森林。不過,公尺爾科只被允許砍倒單行樹木。公尺爾科的伐木機工作過程如下 公尺爾科設定乙個高度引數h 公尺 伐木機公升起乙個巨大的鋸片到高度h,並鋸掉所有的樹比h高的部分...

洛谷1873砍樹 二分答案

伐木工人公尺爾科需要砍倒m公尺長的木材。這是乙個對公尺爾科來說很容易的工作,因為他有乙個漂亮的新伐木機,可以像野火一樣砍倒森林。不過,公尺爾科只被允許砍倒單行樹木。公尺爾科的伐木機工作過程如下 公尺爾科設定乙個高度引數h 公尺 伐木機公升起乙個巨大的鋸片到高度h,並鋸掉所有的樹比h高的部分 當然,樹...