用 Python 编写程序,用于计算 K 小时内移除石头的速率

pythonserver side programmingprogramming更新于 2026/1/18 23:40:17

假设我们有一个数字列表,称为"堆"和一个值 k。piles[i] 表示第 i 堆上的石头数量。每个小时,我们选择任意堆并从该堆中移除 r 个石头。如果我们选择一个少于 r 个石头的堆,则仍然需要一个小时才能清除该堆。我们必须找到 r 的最小值,以便我们可以在小于或等于 k ​​小时内移除所有石头。

因此,如果输入为像 pilles = [3, 6, 4] k = 5,则输出将为 3,因为对于每小时 r = 3 块石头,我们可以在 2 小时内清除第二堆,然后在 2 小时内清除第三堆,并在 1 小时内清除第一堆。

为了解决这个问题,我们将遵循以下步骤 −

  • l := 1
  • h := 堆的最大值
  • r := h
  • 定义一个函数turns()。这将需要 r
  • 返回列表中所有元素的总和,其中 (每个 b 的 b / r 的上限)
  • 从主方法中,执行以下操作 −
  • 当 l < h 时,执行
    • mid := floor of (l + h) / 2
    • 如果turns(mid) > k,则
      • l := mid + 1
    • 否则,
      • h := mid
      • r := r 和 mid 的最小值
  • 返回 R

示例

让我们看看下面的实现以便更好地理解 −

from math import ceil
def solve(piles, k):
   l = 1
   h = max(piles)
   r = h

   def turns(r):
      return sum(ceil(b / r) for b in piles)
   while l < h:
      mid = (l + h) // 2
      if turns(mid) > k:
         l = mid + 1
      else:
         h = mid
         r = min(r, mid)
   return r

piles = [3, 6, 4]
k = 5
print(solve(piles, k))

输入

[3, 6, 4], 5

输出

3

相关文章


有用资源