固定倍数 k=(B+Y)/(A+X)≥1k=(B+Y)/(A+X)\ge1k=(B+Y)/(A+X)≥1。
为了使 X+YX+YX+Y 最小,应取最小的可行 X=max(0,⌈B/k⌉−A)X=\max(0,\lceil B/k\rceil-A)X=max(0,⌈B/k⌉−A),随后 Y=k(A+X)−BY=k(A+X)-BY=k(A+X)−B,于是可以在常数时间内评价一个 kkk。
直接枚举所有 kkk 太慢。令 C=B−1C=B-1C=B−1,则 ⌈B/k⌉=⌊C/k⌋+1\lceil B/k\rceil=\lfloor C/k\rfloor+1⌈B/k⌉=⌊C/k⌋+1。对于 k≤⌈C⌉k\le\lceil\sqrt C\rceilk≤⌈C⌉ 直接枚举;其余 kkk 对应的商 q=⌊C/k⌋q=\lfloor C/k\rfloorq=⌊C/k⌋ 不超过 ⌈C⌉\lceil\sqrt C\rceil⌈C⌉,而商固定时目标值在最小的 k=⌊C/(q+1)⌋+1k=\lfloor C/(q+1)\rfloor+1k=⌊C/(q+1)⌋+1 处最优。再枚举这些小商即可。
每组数据的时间复杂度为 O(B)O(\sqrt B)O(B),空间复杂度为 O(1)O(1)O(1)。
注册一个 Hydro 通用账户,您就可以在我们提供的所有在线评测服务上提交代码、参与讨论。
使用您的 Hydro 通用账户