P2440 木材加工
题目背景
要保护环境
题目描述
木材厂有 根原木,现在想把这些木头切割成 段长度均为 的小段木头(木头有可能有剩余)。
当然,我们希望得到的小段木头越长越好,请求出 l的最大值。
木头长度的单位是 ,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。
例如有两根原木长度分别为 1 和 2,要求切割成等长的 段,很明显能切割出来的小段木头长度最长为 5。
输入格式
第一行是两个正整数 ,分别表示原木的数量,需要得到的小段的数量。
接下来 行,每行一个正整数 ,表示一根原木的长度。
输出格式
仅一行,即 的最大值。
如果连 长的小段都切不出来,输出 0。
#include <iostream>
#include <algorithm>
using namespace std;
int n, k;
int a[100007];
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
int l = 0, r = 1e8 + 1, m;
while (l + 1 < r)
{
m = (l + r) / 2;
int cnt = 0;
for (int i = 1; i <= n; i++)
{
cnt += a[i] / m;
}
if (cnt >= k)
{
l = m;
}
else
{
r = m;
}
}
cout << l << endl;
return 0;
}

浙公网安备 33010602011771号