文章目錄
- 猴子吃桃
猴子吃桃
- 猴子喜歡吃桃,桃園有N棵桃樹,第i棵桃樹上有Ni個桃,看守將在H(>=N)小時后回來;
- 猴子可以決定吃桃的速度K(個/小時),每個小時他會選擇一棵桃樹,從中吃掉K個桃,如果這棵樹上的桃數小于K,他將吃掉這棵樹上所有的桃,然后這一小時內不再吃其余桃樹上的桃;
- 猴子喜歡慢慢吃,但仍想在看守回來之前吃完所有的桃;
- 求猴子可以在H小時內吃掉所有桃子的最小速度K(K為整數)
輸入描述:
輸入一行數字,前面的數字表示每顆樹桃子的個數,最后一個數表示H小時;
輸出描述:
吃掉所有桃子的最小速度K(整數) 或者輸入異常時輸出-1
示例1
輸入:
3 11 6 7 8
輸出:
4
示例2
輸入:
10 20 14 23 21 45 31 7
輸出:
45
python實現:
- 二分法,選擇一個合適的K整數速度;
import matherror = Falsearr = list(map(int, input().strip().split()))
h = arr.pop()
n = len(arr)# 輸入異常
if h < n or any([i <= 0 for i in arr]):error = Truedef eat_up(k):""" 根據當前的速度k, 在h小時內能否吃完 """global arr, hused_h = 0for i in arr:used_h += math.ceil(i / k)return used_h <= h# 最小速度
left = 1
right = sum(arr) # 最大速度 (一小時吃完)
while left <= right:mid = (left + right) // 2if eat_up(mid):# 能在H小時內吃完,則降低速度right = mid - 1else:left = mid + 1if error:print(-1)
else:print(left)