📝 ### 第33题 **完善程序(一)木材加工 - 二分答案**(下列程序供第 33~37 题使用) 木材厂有 $n$ 根原木,第 $i$ 根原木的长度为 $L_i$。现需要将这些原木切割成 $k$ 段长度均相同的小木段。切割过程中不能将两根原木拼接到一起,且多余的木材将被废弃。求能够切割出的最大小木段长度。若连切出 $k$ 段长度为 1 的木段都办不到,则输出 0。试补全二分查找算法程序。 …
### 第33题
**完善程序(一)木材加工 - 二分答案**(下列程序供第 33~37 题使用)
木材厂有 $n$ 根原木,第 $i$ 根原木的长度为 $L_i$。现需要将这些原木切割成 $k$ 段长度均相同的小木段。切割过程中不能将两根原木拼接到一起,且多余的木材将被废弃。求能够切割出的最大小木段长度。若连切出 $k$ 段长度为 1 的木段都办不到,则输出 0。试补全二分查找算法程序。
```cpp
01 #include <iostream>
02 #include <vector>
03 #include <algorithm>
04 using namespace std;
05
06 bool check(const vector<int>& L, int k, int len) {
07 if (len == 0) return true;
08 int count = 0;
09 for (int x : L) {
10 count += ①;
11 }
12 return ②;
13 }
14
15 int main() {
16 int n, k;
17 cin >> n >> k;
18 vector<int> L(n);
19 int max_len = 0;
20 for (int i = 0; i < n; i++) {
21 cin >> L[i];
22 max_len = max(max_len, L[i]);
23 }
24
25 int left = 1, right = max_len;
26 int ans = 0;
27
28 while (③) {
29 int mid = left + (right - left) / 2;
30 if (check(L, k, mid)) {
31 ans = mid;
32 ④;
33 } else {
34 ⑤;
35 }
36 }
37
38 cout << ans << endl;
39 return 0;
40 }
```
**单选题**:① 处应填( )。