QOJ1289 A+B Problem 题解
这题实在太难了,所以单开一个博客写过程
题意:给定一个 01 串
(不妨
贪心:
若
引理 1:
证明 1:归纳假设
设
-
情况一:
s_2=0 ,根据归纳,存在一种最优解,s_2 填到了短串上。那既然s_1=s_2=0 ,而s_1 填到长串s_2 填到短串,也就可以将s_1 填到短串s_2 填到长串。此时就是s_1=0 时填到了短串。 -
情况二:
s_2=1 。-
若
s_2 填到了短串。我们可以让s_1 填到短串,s_2 填到长串,之后的不变。因为长串的数更大,所以得出的结果也更优。 -
若
s_2 填到了长串。假设我们在长串又填了一些数,记为x ,第一次往短串填数,填了一个w 。-
那我们进行调整:$s_1$ 往短串填,$s_2,x$ 依旧填长串,$w=0$ 填长串。这样两串的形式就变成:短串是 $\overline{0.....}$,长串是 $\overline{1x0......}$。 $s_1,w$ 都是 $0$,所以短串最高位贡献不变,而 $s_2=1,x$ 都高了一位,答案更优。 -
我们也进行和 $w=0$ 一样的调整。两串此时变成 $\overline{0...}$ 和 $\overline{1x1.....}$。 尽管短串的 $1$ 到了长串的 $x$ 后面可能会少一点,但是考虑整体:设原本短串的 $1$ 在第 $j$ 位,长串的 $1$ 在第 $k$ 位,贡献是 $2^j+2^k$;而调整完之后不管短串调到哪里,长串的 $1$ 贡献变为 $2^{k+1}>2^j+2^k$,所以调整完一定更优。
-
-
综上,引理 1 得证。草这么难还只是引理 1
引理 2:
证明 2:假设
为了方便表述,称长串的比短串最高位更高的位置(不包括短串最高位的对应位置)为 “高部分”。
填了
根据条件,高部分中一定有
此时在这个
引理 2 得证。
引理 3:如果
证明 3:假设
同时设
设
设
接下来开始分类讨论。
-
-
考虑 $p$ 在 $x$ 中是怎么填的。设 $p$ 在长串中填了 $s_1+u$,短串中填了 $s_2+v$,即长串中为 $\overline{1u...}$,短串中为 $\overline{0v....}$。 这个时候我们又按 $u$ 的长度分两种情况。 1. $s_1+u$ 全部都位于高部分,即 $u$ 最右边也严格高于短串的最高位。 调整,我们把 $s_1$ 填到短串。根据条件,我们可以把原本 $s_1+u$ 的位置全部填上 $1$,这显然要比原本的大。 而在短串,最高位上原本是 $0$ 现在是 $1$。已经足够顶掉后面所有数了。 因此最优。 2. $s_1+u$ 最右边有比短串最高位低的。 我们发现按照 $x_0$ 的填法,显然 $p$ 这个前缀的贡献会比 $x$ 中 $p$ 的贡献更大。而对于剩下的 $S-p$,我们发现 $x_0$ 的填法长串剩下的可填位置更多,短串剩下的少;而 $x$ 的填法长串剩下的可填位置和短串更加平均。 而平均就小(感性理解,懒得证了)。所以 $x_0$ 可以优于 $x$。
综上所述,贪心正确。