##题目名字 木材加工
[题目链接](木材加工 - 洛谷)
##题意
>有n根木头,分成K段,每段长度为L,求L的最大值
##思路
>1.定义木材长度,数量
>2.用二分法,for循环
>3.找出最小长度,最大长度
>.4.while 嵌套 if 判断
##坑点:如果连 1cm1cm 长的小段都切不出来,输出 0 容易忘
##代码
#include <iostream>
#include <algorithm>
using namespace std;
long long n, k;
long long a[1000005];
//自定义函数 用于检查给定的长度是否满足条件
//函数f(mid)用来检查给定的长度mid是否满足条件,
//即能够将原木切割成k段长度均为mid的小段木头。
bool f(long long x) {
long long ans = 0;
for (int i = 1; i <= n; i++) {
ans += a[i] / x; }
return ans >= k;
}
int main() {
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
//l表示小段木头的最小长度,r表示小段木头的最大长度
long long l = 0, r = 100000001;
//l的最大值肯定不超过r
long long mid;
//是l+1小于r ,确保l在r的附近,但比r小
while (l + 1 < r) {
mid = (l + r) / 2;
//调用函数f,如果返回值为true,则将l更新为mid。
if (f(mid))
{
l = mid;
}
else
{
r = mid;
}
}
cout << l ;
return 0;
}