02774: 木材加工
http://cs101.openjudge.cn/practice/02774/
木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目是给定了。当然,我们希望得到的小段越长越好,你的任务是计算能够得到的小段木头的最大长度。
木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是正整数。
输入
第一行是两个正整数N和K(1 ≤ N ≤ 10000, 1 ≤ K ≤ 10000),N是原木的数目,K是需要得到的小段的数目。 接下来的N行,每行有一个1到10000之间的正整数,表示一根原木的长度。
输出
输出能够切割得到的小段的最大长度。如果连1厘米长的小段都切不出来,输出"0"。
样例输入
3 7
232
124
456样例输出
114来源
NOIP 2004
可以参考04135: 月度开销,08210: 河中跳房子
python
n, k = map(int, input().split())
expenditure = []
for _ in range(n):
expenditure.append(int(input()))
def check(x):
num = 0
for i in range(n):
num += expenditure[i] // x
return num >= k
lo = 1
hi = max(expenditure) + 1
if sum(expenditure) < k:
print(0)
exit()
ans = 1
while lo < hi:
mid = (lo + hi) // 2
if check(mid):
ans = mid
lo = mid + 1
else:
hi = mid
print(ans)