P14321 「ALFR Round 11」D Adjacent Lifting, Fewest Rounds 题解

前言:考场上使用神秘的样例分析法蒙出来了,赛后发现竟然被评了个紫,万恶的良心驱使我写一篇题解。


我们先看到操作。

  1. 任选一个数字使其 \(+2\)
  2. 选择两个相邻的数字使其各 \(+1\)

要求 使用操作 \(2\) 的次数最小

换句话说我们可以任意使用操作 \(1\)

这启发我们进行 奇偶性分析

对于一个奇数 \(n\)\(1-n\) 的排列中奇数的个数为 \(\frac{n+1}{2}\) 。令其等于 \(k\) .

我们对于一个排列\(\pi\),构造它 \(\bmod 2\) 意义下的数列 \(b\)

\[(\pi_1 \bmod 2,\pi_2 \bmod 2,...\pi_n \bmod 2 ) \]

我们不妨称此为一次映射。

对于一组 \(b\) ,在所有排列中由此映射到这个 \(b\) 的个数都是

\[k!\times (n-k)! \]

事实上,我们发现,对于映射后序列相同的所有排列,其答案必然相等

我们记 \(S_b\) 表示 \(b\) 中为 \(1\) 的位置的下标的集合。显而易见 \(|S_b| = k\)

我真没在骂人

\(m(S_b)\) 表示 \(S_b\) 这个代表的所有排列的答案。

\[ans= k!(n-k)! \sum_{|S_b|=k}m(S_b) \]

\(C=(^n_k)\),则

\[ans=n!\frac{1}{C} \sum_{|S_b|=k}m(S_b) \]


此时问题转化为如何求这个操作次数。

  • 给定一个奇偶向量 \(b=(b1,\dots,b_n)\)

我们将 操作转化为线性方程

把在第 \(i\) 条边(即连接顶点 i 与 i+1 )所做操作 (2) 的次数记为整数 \(x_i\ge0\) \((i=1,\dots,n-1)\)

每次操作在两个相邻位置同时 +1,因此只改变这两个位置的奇偶(翻转)。

若我们只关心 模 2 的奇偶,则每个顶点的最终奇偶等式为(以目标统一成常数 \(t\in{{0,1}}\),表示我们要把全部数变成偶或全部变成奇):

\[ x_{i-1}+x_i \equiv b_i + t \pmod 2\quad (i=1,\dots,n), \]

其中约定 \(x_0=x_n=0\).

你现在发现这个 \(t\) 很烦人。我们随机手算一下样例会发现这个 \(t\) 其实是 唯一确定的

考虑由 GPT 提供的证明。

将 RHS 总和求和得到

\[\sum_{i=1}^n(b_i+t)=\sum b_i +nt=k+nt \]

左式 必定为偶数,因此 \(t\)\(k\) 同奇偶

\[\square \]


表示方程。

\[x_{i-1}+x_i \equiv b_i+t(\bmod 2) \]

\(x_0=0\) 开始递推,可得:

\[ x_1 \equiv b_1 + t, \]

\[ x_2 \equiv b_2 + t + x_1 \equiv (b_1+b_2) + (2t) \equiv (b_1+b_2) + 0 \pmod2, \]

更一般地,使用异或表示

\[x_i = \bigoplus_{j=1}^i (b_j \oplus t), \]

\[s_i=\sum_{j=1}^i b_j (0\le s_i\le i) \]

因为 \(t\) 为常数,所以

\[x_i=s_i \bmod 2 \oplus (i\ · \ t\bmod 2)=(s_i \bmod 2) \oplus ((i·t) \bmod 2) \]

因此

\[m(S)=\sum_{i=1}^{n-1} x_i = \#[1\le i\le n-1: \ s_i \bmod 2 \ne (i\cdot t)\bmod 2]\]


我们要计算

\[\sum_{|S|=k} m(S) =\sum_{|S|=k} \sum_{i=1}^{n-1} \mathbf 1{ s_i \bmod 2 \ne (i t)\bmod 2}\]

\[=\sum_{i=1}^{n-1} \# \Big{ S: |S|=k,\ s_i \bmod 2 \ne (i t)\bmod 2\Big}} \]

好吧这里的 latex 寄了

image


固定 \(i\) 。把前 \(i\) 个位置中恰好有 \(u\)\(1\) \((0\le u\le\min(i,k))\)

\[\# \{S:s_i=u,|S|=k\}=\binom{i}{u} \binom{n-i}{k-u} \]

于是,前缀 (s_i) 的奇偶分布为:奇数的个数

\[ O_i=\sum_{\substack{0\le u\le\min(i,k)\ u\ \text{odd}}}\binom{i}{u}\binom{n-i}{k-u}, \]

偶数的个数

\[E_i=\sum_{u\ \text{even}}\binom{i}{u}\binom{n-i}{k-u} \]

总数

\[(E_i+O_i=\binom{n}{k}=\mathcal C). \]


我们定义

\[D_i = E_i - O_i = \sum_{u}(-1)^u \binom{i}{u}\binom{n-i}{k-u}\]

使用

\[E_i=(\mathcal C+D_i)/2, O_i=(\mathcal C-D_i)/2 \]

则有

\[\# \{S:s_i=u,|S|=k\}=\frac{\mathcal C-(-1)^{it}D_i}{2} \]

因此

\[\sum_{|S|=k} m(S) = \sum_{i=1}^{n-1} \frac{\mathcal C - (-1)^{it} D_i}{2} = \frac{n-1}{2}\mathcal C - \frac{1}{2}\sum_{i=1}^{n-1} (-1)^{it} D_i.\]

于是平均值

\[\overline m(n) = \frac{1}{\mathcal C}\sum_{|S|=k} m(S) = \frac{n-1}{2} - \frac{1}{2\mathcal C}\sum_{i=1}^{n-1} (-1)^{it} D_i. \tag{★}\]


下面是牛逼的生成函数,但是是 GPT 写的(x)

其实到这个时候是可以自己手动猜测 \(D\) 了。式子在下面。我建议大家跳过 GPT 写的这一坨 shi

接下来的核心工作就是计算

\[\mathcal D:=\sum_{i=1}^{n-1} (-1)^{i t} D_i =\sum_{i=1}^{n-1} (-1)^{i t}\sum_{u}(-1)^u\binom{i}{u}\binom{n-i}{k-u}.\]

\(D_i\) 看成系数,对于任意的 \(i\)

\[D_i=\sum_{u}(-1)^u\binom{i}{u}\binom{n-i}{k-u} =\big[x^k\big]\big( (1-x)^i(1+x)^{n-i}\big).\]

因此

\[(-1)^{i t}D_i = [x^k]\big( (-1)^{i t}(1-x)^i(1+x)^{n-i}\big) \]

image

image

image

最终得到的就是

image

image

把 (2) 代回 (★):

  • \(n\equiv1\pmod4\),则 \(\mathcal D=0\),所以

\[ \overline m(n) = \frac{n-1}{2}. \]

  • \(n\equiv3\pmod4\),则 \(\mathcal D = -\dfrac{2}{n+3}\mathcal C\),因此

\[ \overline m(n) = \frac{n-1}{2} - \frac{1}{2\mathcal C}\Big(-\frac{2}{n+3}\mathcal C\Big) = \frac{n-1}{2} + \frac{1}{n+3} = \frac{(n-1)(n+3)+2}{2(n+3)} = \frac{n^2+2n-1}{2(n+3)}. \]

做完啦。

posted @ 2025-10-27 00:35  houpingze  阅读(35)  评论(2)    收藏  举报