分饼干

在这里插入图片描述

解析

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

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

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

  1. x>landx>r

    (x1+xl)l+(x1+xr)r2+x=m2xll2l+2xrr2r+2x=2m2xl+2xr+2x=2m+l2+r2+l+rx(2l+2r+2)=2m+l2+r2+l+rx=2m+l2+r2+l+r2l+2r+2

    特别注意等差数列的末项是 x1,首项是 xlxr,项数是 lr。直接使用等差数列求和公式即可。

  2. xlandx>r

    x(x1)+(x1+xr)r2+x=mx2x+2xrrr2+2x=2m2xrr2+x2+xr=2mx2+x(1+2r)(2m+r+r2)=0

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

  3. xrandx>l

    和情况 2 大同小异。

  4. xlandxr

    x(x1)2×2+x=mx2x+x=mx2=mx=m

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

     

代码


All Rights Reserved 2022 Wang Zhanrui