OD 算法题 B卷【猴子吃桃】

文章目录

猴子吃桃

  • 猴子喜欢吃桃,桃园有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整数速度;
python 复制代码
import math

error = False

arr = list(map(int, input().strip().split()))
h = arr.pop()
n = len(arr)

# 输入异常
if h < n or any([i <= 0 for i in arr]):
    error = True


def eat_up(k):
    """ 根据当前的速度k, 在h小时内能否吃完 """
    global arr, h
    used_h = 0
    for i in arr:
        used_h += math.ceil(i / k)
    return used_h <= h


# 最小速度
left = 1
right = sum(arr)  # 最大速度 (一小时吃完)
while left <= right:
    mid = (left + right) // 2

    if eat_up(mid):
        # 能在H小时内吃完,则降低速度
        right = mid - 1
    else:
        left = mid + 1

if error:
    print(-1)
else:
    print(left)
    
相关推荐
I AM_SUN11 天前
153. 寻找旋转排序数组中的最小值
数据结构·c++·算法·leetcode·二分法
吃瓜市民3 个月前
剑指offer - 面试题11 旋转数组的最小数字
数据结构·c++·算法·二分法
Espresso Macchiato4 个月前
Leetcode 3449. Maximize the Minimum Game Score
贪婪算法·二分法·leetcode hard·leetcode 3449·leetcode周赛436
源代码•宸6 个月前
Leetcode—367. 有效的完全平方数【简单】
c++·经验分享·算法·leetcode·二分法
玉蜉蝣7 个月前
PAT甲级-1048 Find Coins
c++·算法·二分法
万河归海4289 个月前
C语言——利用二分法求数组中特定元素的索引,并在函数中引入了冒泡排序,可以求无序数组中的特定元素的索引
c语言·数据结构·算法·visualstudio·数组·二分法·冒泡
Fuliy9610 个月前
数学建模--二分法
笔记·算法·数学建模·二分法·学习资料
下课后泡实验室10 个月前
【刷题汇总 -- 排序子序列、消减整数、最长上升子序列(二)】
算法·二分法·贪心策略·排序子序列·消减整数·最长上升子序列二·恰好为0
源代码•宸10 个月前
Leetcode—74. 搜索二维矩阵【中等】
c++·经验分享·算法·leetcode·矩阵·二分法