假设我们有 k 个糖果。我们必须将它们分配给儿童。现在有一些规则
第 i 个孩子会得到 i^2 个糖果
在索引 1 到 ii 的所有儿童都被送达之前,索引 i 的任何儿童都不会得到任何糖果
如果第 i 个孩子没有得到 i^2 个糖果,那么这不是一次有效的发球。
所以,如果输入像 k = 20,那么输出将是 3 因为,第一个会得到 1,第二个会得到 2^2 = 4,第三个会得到 3^2 = 9,但第四个需要 4 ^2 = 16,但我们只剩下 6 个糖果,所以这不是一个有效的分配,所以只会给三个孩子。
让我们看看以下实现以获得更好的理解 -
def solve(k): left = 0 right = k while (right - left > 1): mid = (left + right) // 2 if (mid * (mid + 1) * (2 * mid + 1) // 6 > k): right = mid else: left = mid if (right * (right + 1) * (2 * right + 1) <= k * 6): return right return left k = 20 print(solve(k))
20输出结果
3