砍树题目难度:初阶时间限制:1000ms内存限制:128mb题目描述伐木工人 Mirko 需要砍 m米长的木材。对 Mirko 来说这是很简单的工作因为他有一个漂亮的新伐木机可以如野火一般砍伐森林。不过Mirko 只被允许砍伐一排树。 Mirko 的伐木机工作流程如下:Mirko 设置一个高度参数 h米伐木机升起一个巨大的锯片到高度 h并锯掉所有树比 h高的部分当然树木不高于 h米的部分保持不变。
#include
using namespace std;
int main() { int n, m; cin >> n >> m;
vector<int> trees(n);
for (int i = 0; i < n; i++) {
cin >> trees[i];
}
sort(trees.begin(), trees.end());
int left = 0, right = trees[n-1];
int result = 0;
while (left <= right) {
int mid = left + (right - left) / 2;
int sum = 0;
for (int i = n-1; i >= 0; i--) {
if (trees[i] <= mid) {
break;
}
sum += (trees[i] - mid);
}
if (sum >= m) {
result = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
cout << result << endl;
return 0;
原文地址: https://www.cveoy.top/t/topic/ihCr 著作权归作者所有。请勿转载和采集!