【正经题解】Gold King大厂活动
2024-02-22 14:47:25
发布于:浙江
17阅读
0回复
0点赞
#include <iostream>
using namespace std;
int main() {
int n, k, a[100000], left, mid, num;
// 输入原木数目和需要的小段木头数目
cin >> n >> k;
int right = 0;
// 输入每根原木的长度,并找到最大的原木长度
for (int i = 0; i < n; i++) {
cin >> a[i];
if (right < a[i]) {
right = a[i];
}
}
right++;
left = 0;
// 二分查找能够切割得到的小段木头的最大长度
while (left + 1 < right) {
mid = (left + right) / 2;
num = 0;
// 统计使用当前长度切割得到的小段木头数目
for (int i = 0; i < n; i++) {
if (num >= k) {
break;
}
num += a[i] / mid;
}
// 根据小段木头数目的情况调整二分查找区间
if (num >= k) {
left = mid;
} else {
right = mid;
}
}
// 输出结果
cout << left << endl;
return 0;
}
这里空空如也
有帮助,赞一个