题解:P10280 [USACO24OPEN] Cowreography G
David_Mercury · · 题解
Preface
提供一份严谨的数学证明。
感谢 @lupengheyyds 帮助证明了部分结论。
前置数学知识
-
定义
\{x\} = x - \lfloor x \rfloor ,即x 的分数部分。它也可以表示为\{x\} = x \bmod 1 。 -
-
-
\lceil -x \rceil = -\lfloor x \rfloor
Part 1.
可以发现,问题等价于将
这里我们需要先证明一下这个“代价”是什么:
引理:将位置
x, y 交换并保持中间数不改变的最优移动次数为\lceil (y-x)/k \rceil 。(x, y 满足x < y, s[x] \ne s[y] 。)
证明:使用数学归纳法。当
Part 2.
引理:如果有
a, b, c, d 四个位置满足c > a > b 且a > d ,则绝对不会出现(c, b) 配对、(a, d) 配对的情况。对于
c < a < b 且a < d 同理。用人话表述,就是对于序列
s 中的所有1 ,绝对可以分为若干段“全部向右匹配”或者是“全部向左匹配”的段。绝对不会出现“交叉”的情形。
证明:
-
c > a > b > d 如果无交叉配对,即
(c, a) 配对、(b, d) 配对,有代价:\left\lceil \dfrac{c-a}{k} \right\rceil + \left\lceil \dfrac{b-d}{k} \right\rceil 如果有交叉配对,即
(c, b) 配对、(a, d) 配对,有代价:\left\lceil \dfrac{c-b}{k} \right\rceil + \left\lceil \dfrac{a-d}{k} \right\rceil 显然有:
\left\lceil \dfrac{c-a}{k} \right\rceil \le \left\lceil \dfrac{c-b}{k} \right\rceil, \left\lceil \dfrac{b-d}{k} \right\rceil \le \left\lceil \dfrac{a-d}{k} \right\rceil 结论成立。
-
c > a > d > b 代价式子和上面是一样的。而由于此时有:
\left\lceil \dfrac{c-b}{k} \right\rceil \ge \left\lceil \dfrac{c-a+d-b}{k} \right\rceil \ge \left\lceil \dfrac{c-a}{k} \right\rceil + \left\lceil \dfrac{d-b}{k} \right\rceil - 1 故有:
\begin{aligned} \left\lceil \dfrac{c-b}{k} \right\rceil + \left\lceil \dfrac{a-d}{k} \right\rceil &\ge \left\lceil \dfrac{c-a}{k} \right\rceil + \left\lceil \dfrac{d-b}{k} \right\rceil + \left(\left\lceil \dfrac{a-d}{k} \right\rceil - 1\right) \\ &\ge \left\lceil \dfrac{c-a}{k} \right\rceil + \left\lceil \dfrac{d-b}{k} \right\rceil \end{aligned} 结论成立。
由于该结论成立,我们完全可以将整个序列拆成若干段来处理,每段内有“
Part 3.
注意:接下来我们就要开始推式子了,请你回顾一下前面的数学前置知识。
设
由于我们更喜欢向下取整,我们将其化为如下的形式:
然后我们发现,如果将分数部分提出,我们将得到一个定值。令
于是我们需要最小化
令
于是我们需要最大化
于是我们需要最大化余数相加
不难想到如下贪心:让每个
用 set 维护,能在
代码嘛,本质上和其他题解是一模一样的,就不放了。