当前位置:   article > 正文

不爱施肥的小布

不爱施肥的小布

我们可以将施肥的过程看作是在一条时间轴上不断“拼接”若干个长度为 fields[i]/k 的工作日,题目的要求就是要找到最小的 k,使得这些工作日总数不超过 n。显然,k 越大,每个工作日的长度越短,所以总数就越多;k 越小,则工作日的长度越长,因此总数就越少。

因此,我们可以使用二分查找来快速定位最小的合适的 k。具体地,假设当前二分的区间为 [l, r],我们先计算出 mid = (l+r) // 2。接着,我们模拟施肥机以 k=mid 的能效完成施肥任务需要的天数 cnt,并与给定的 n 进行比较:

- 如果 cnt <= n,表示以 k=mid 的能效可以在规定天数内完成所有的施肥任务,因此我们继续在区间 [mid+1, r] 中寻找更小的 k;

- 如果 cnt > n,表示以 k=mid 的能效无法在规定天数内完成所有的施肥任务,因此我们需要在区间 [l, mid-1] 中寻找更大的 k。

不断重复以上过程,直到确定最小的合适的 k 为止。最终,我们返回的结果即为最小的合适的 k。

下面是题解的代码实现:

  1. def days_needed(k, fields):
  2. days = 0
  3. for field in fields:
  4. days += (field + k - 1) // k
  5. ret
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/121282?site
推荐阅读
相关标签
  

闽ICP备14008679号