admin官方

固定 c,yc,y,可以发现 f(c,x,y)f(c,x,y) 关于 xx 是下凸的。在 R\R 上考虑,那么最小值一定是在某个 x=aicix=\dfrac{a_i}{c_i} 处取到。因此改为在 Z\Z 上考虑,那么最小值一定是在某个 x=⌊aici⌋,⌈aici⌉x=\left\lfloor\dfrac{a_i}{c_i}\right\rfloor,\left\lceil\dfrac{a_i}{c_i}\right\rceil 处取到。

现在不固定 c,yc,y,通过整除分块可以得出可能的 xx 只有 O(nV)O(n\sqrt V) 种。对于 yy 也是类似的。

我们枚举 x,yx,y 中较大的一个。不妨设 x≥yx\ge y。

固定 yy,此时每个 cic_i 都是独立的。在 R\R 上考虑,那么 ∣ai−cix∣+∣bi−ciy∣|a_i-c_ix|+|b_i-c_iy| 的最小值一定在 ci=aixc_i=\dfrac{a_i}{x} 处取到。因此改为在 Z\Z 上考虑,那么最小值一定是在某个 ci=⌊aix⌋,⌈aix⌉c_i=\left\lfloor\dfrac{a_i}{x}\right\rfloor,\left\lceil\dfrac{a_i}{x}\right\rceil 处取到。

现在不固定 yy,一种暴力的方法是直接 O(2n)O(2^n) 地枚举每个 cic_i 的取值,并计算 f(c,x,y)f(c,x,y) 的最小值。这可以在 O(n)O(n) 或 O(nlog⁡n)O(n\log n) 内解决。总时间复杂度为 O(n22nV)O(n^22^n\sqrt V) 或 O(n2log⁡n2nV)O(n^2\log n2^n\sqrt V)。

但我们也可以对于每个 ii,求出 yy 变化的过程中 ∣ai−cix∣+∣bi−ciy∣|a_i-c_ix|+|b_i-c_iy| 的取值情况。根据之前对 cic_i 的分析可以得到这个函数是关于 yy 的 O(1)O(1) 段分段一次函数。只需要将所有函数都叠加起来即可求出 f(c,x,y)f(c,x,y) 的最小值。这可以在 O(n)O(n) 或 O(nlog⁡n)O(n\log n) 内解决。总时间复杂度为 O(n2V)O(n^2\sqrt V) 或 O(n2log⁡nV)O(n^2\log n\sqrt V)。常数较大。