分饼干

在这里插入图片描述

解析

无需二分,使用纯粹的数学就可以以 O(1) 的时间复杂度解决。

先将 m 减去 n,也就是给每个人先发 1 颗糖果。

设班长拿了 x 块糖,左边有 l 个人,右边有 r 个人。贪心地考虑发糖情况,类似于一个金字塔一样,最好左右都构成公差为 1 的等差数列。以下分情况假设,分别列出方程进行求解,并验证答案是否符合假设。

  1. x>land⁡x>r

    (x−1+x−l)l+(x−1+x−r)r2+x=m2xl−l2−l+2xr−r2−r+2x=2m2xl+2xr+2x=2m+l2+r2+l+rx(2l+2r+2)=2m+l2+r2+l+rx=2m+l2+r2+l+r2l+2r+2

    特别注意等差数列的末项是 x−1,首项是 x−l 和 x−r,项数是 l 或 r。直接使用等差数列求和公式即可。

  2. x≤land⁡x>r

    x(x−1)+(x−1+x−r)r2+x=mx2−x+2xr−r−r2+2x=2m2xr−r2+x2+x−r=2mx2+x(1+2r)−(2m+r+r2)=0

    对于以上的方程,直接使用一元二次方程求根公式求解即可。注意:两个解只须保留较大的,因为只需计算非负解。

  3. x≤rand⁡x>l

    和情况 2 大同小异。

  4. x≤land⁡x≤r

    x(x−1)2×2+x=mx2−x+x=mx2=mx=m

    对于以上的每个可行解,将解向下取整后打擂台求最大值即可。最后不要忘了,每个人先发了 1 颗糖果,Max 值要加 1。

     

代码


All Rights Reserved 2022 Wang Zhanrui