P4931 [MtOI2018\]情侣?给我烧了!

[P4931 MtOI2018]情侣?给我烧了!

写两种做法。

第一种是用了类似于错排的思想。

答案是 k 个人匹配方案数乘上 n - k 个人不匹配的方案数。

k 个人匹配的方案数:先选 k 对人,再选出 k 对位置,再选出顺序,同一对之间可以交换。

\[\binom nk\binom nk k! 2^k \]

i 对人不匹配的方案设为 \(f_i\),这相当于有 2i 个人,2i 个座位,每个人恰好有一个不能选的位置。

这和普通错排不同于它不能一个一个的选,因为如果现在只有 2i-1 个人,那么有一个人的限制就与众不同!

所以我们两个两个地考虑。

按照错排的套路,我们假设最后加进来的两个人的分别在 x 排和 y 排,假设在 x 排和 y 排另外两个人的情侣叫做 a 和 b。这还要分讨 a 和 b 是不是情侣,好像有点麻烦。

换一个思路,我们选第一排那两个不是情侣的人,先枚举这两个人分别是谁 \(2n * (2n-2)\),然后讨论他们的情侣在哪里。

  1. 他们的情侣在一起。枚举他们情侣所在排数和这两个人的相对顺序,那么剩下的方案数显然是 \(2 * (n-1) * f[n-2]\)
  2. 他们的情侣不在一起,现在剩下的 2(n-1) 个人恰好都有 1 个限制,于是是 f[n-1]

所以 \(f_n = 2n * (2n - 2) * (f_{n-1} + 2 * (n - 1) * f_{n-2})\)

第二种是暴力的推式子大法。

\(f_n\) 为钦定 n 对人,剩下随意的方案数,\(g_n\) 为恰好 n 对人,也就是答案。

每个 \(g_n\) 会对 \(\binom nk\)\(f_k\) 造成贡献:

\[f_i = \sum_{j=i}^n \binom jig_j \]

二项式反演:

\[g_i = \sum_{j=i}^n(-1)^{i-j}\binom jif_j \]

钦定 k 个人匹配的方案数:先选 k 对人,再选出 k 对位置,再选出顺序,同一对之间可以交换,剩下 2n - 2k 人随意。

\[f_k = \binom nk \binom nk k!2^k(2n-2k)! \]

所以

\[g_k = \sum_{j=k}^n(-1)^{k-j}\binom jk\binom nj \binom nj j!2^j(2n-2j)! \]

有一些项和 j 有关,有一些项和 n - j 有关,联想到卷积,考虑把这个式子拆成卷积的形式。

\[\begin{aligned} g_k &= \sum_{i=0}^{n-k}(-1)^{k-n+i}\binom{n-i}{k}\binom{n}{i}\binom ni(n-i)!2^{n-i}(2i)!\\ &= {(n!)^22^k\over k!}\sum_{i=0}^{n-k} \frac{(-2)^{n-k-i}}{(n-k-i)!}\frac{(2i)!}{i!^2}\\ \end{aligned} \]

处理卷积我目前知道两种方法,第一种是用 ntt 直接莽,第二种是把两个函数分别用写成生成函数的形式,然后乘起来。在这个题里,ntt 太慢了,考虑用生成函数。

\(F(x) = \sum_{i=0}^{n} \frac{(-2)^{n-i}}{(n-i)!}\frac{(2i)!}{i!^2},A(x) = \sum_{i=0}^{n} \frac{(-2)^{i}}{i!},B(x)=\sum_{i=0}^{n}\frac{(2i)!}{i!^2},F = A\times B\)

\[\begin{aligned} A(x) &= e^{-2x}\\ B(x) &=\sum_{i=0}^{n}\binom{2i}{i}x^i\\&= \frac1{(1-4x)^{1/2}}\\ F &= A \times B = \frac{e^{-2x}}{(1-4x)^{1/2}} \end{aligned} \]

生成函数转递推式的常用技巧是对 F 求导,对 F 求导后整理可得:

\[F ′ (x)=4xF ′ (x)+8xF(x) \]

即:

\[(n+1)F[n+1]=4nF[n]+8F[n−1] \]

把 F 求出来后再乘上前面那一大坨系数即可得到 G。

posted @ 2025-07-17 10:25  花子の水晶植轮daisuki  阅读(22)  评论(1)    收藏  举报
https://blog-static.cnblogs.com/files/zouwangblog/mouse-click.js