题目描述:

image.png
image.png
image.png

题解:

如果正方形土地的右上角坐标为 (n, n),周长为 8n,那么其中包含的苹果总数为:
Sn=2n(n+1)(2n+1)
对于坐标为 (x,y) 的树,它有 ∣x∣+∣y∣ 个苹果。因此,一块右上角坐标为 (n,n) 的正方形土地包含的苹果总数为
image.png
由于 x 和 y 是对称的,因此:
image.png
解法1:暴力枚举
从小到大枚举 n,直到 2n(n+1)(2n+1)≥neededApples 为止。

解法2:二分查找
由于 S那是随着 n 单调递增的,可以通过二分查找的方法,找出最小的满足条件的n

  1. class Solution:
  2. def minimumPerimeter(self, neededApples: int) -> int:
  3. left = 1
  4. mid = 0
  5. right = 100000
  6. while(left<=right):
  7. mid = int((left + right) /2)
  8. if(2 * mid * (mid + 1) * (2 * mid + 1) >=neededApples):
  9. ans = mid
  10. right = mid - 1
  11. else:
  12. left = mid + 1
  13. return ans*8 #周长为8n