P4931 [MtOI2018\]情侣?给我烧了!
[P4931 MtOI2018]情侣?给我烧了!
写两种做法。
第一种是用了类似于错排的思想。
答案是 k 个人匹配方案数乘上 n - k 个人不匹配的方案数。
k 个人匹配的方案数:先选 k 对人,再选出 k 对位置,再选出顺序,同一对之间可以交换。
i 对人不匹配的方案设为 \(f_i\),这相当于有 2i 个人,2i 个座位,每个人恰好有一个不能选的位置。
这和普通错排不同于它不能一个一个的选,因为如果现在只有 2i-1 个人,那么有一个人的限制就与众不同!
所以我们两个两个地考虑。
按照错排的套路,我们假设最后加进来的两个人的分别在 x 排和 y 排,假设在 x 排和 y 排另外两个人的情侣叫做 a 和 b。这还要分讨 a 和 b 是不是情侣,好像有点麻烦。
换一个思路,我们选第一排那两个不是情侣的人,先枚举这两个人分别是谁 \(2n * (2n-2)\),然后讨论他们的情侣在哪里。
- 他们的情侣在一起。枚举他们情侣所在排数和这两个人的相对顺序,那么剩下的方案数显然是 \(2 * (n-1) * f[n-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\) 造成贡献:
二项式反演:
钦定 k 个人匹配的方案数:先选 k 对人,再选出 k 对位置,再选出顺序,同一对之间可以交换,剩下 2n - 2k 人随意。
所以
有一些项和 j 有关,有一些项和 n - j 有关,联想到卷积,考虑把这个式子拆成卷积的形式。
处理卷积我目前知道两种方法,第一种是用 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\)。
生成函数转递推式的常用技巧是对 F 求导,对 F 求导后整理可得:
即:
把 F 求出来后再乘上前面那一大坨系数即可得到 G。

浙公网安备 33010602011771号