ABC 462 G (容斥原理,NTT,多项式的启发式合并)
G - Completely Wrong
Q:给定两个长度为 \(n\) 的序列 \(C, G\),元素值域为 \([1, n]\),求满足对于 \(\forall i \in [1, n], C_{p_{i}} \neq G_{i}\) 的长度为 \(n\) 的排列 \(p\) 个数(即错排)。
如果 \(C, G\) 均为 \(1 \backsim n\) 的排列,那么方案数显然为 \(n\) 的错排数。而分析错排问题的一个经典思想便是利用容斥原理:考虑计算存在某个位置满足 \(C_{p_{i}}\) 与 \(G_{i}\) 匹配的方案数 \(cnt\),那么答案便为 \(n! - cnt\)。
计算 \(cnt\):我们钦定其中 \(t\) 个位置的 \(G_{i}\) 一定匹配,剩下的 \(n - t\) 个位置的情况任意(可以匹配,也可以不匹配);当 \(t\) 为奇数时加到总贡献中,为偶数时减。于是 \(cnt\) 可以表示为:
若不按最基本的容斥原理角度(划分子集)考虑,而是按照匹配位置个数考虑,可以表示为:
其中 \(P_{t}\) 表示钦定 \(t\) 个位置匹配的总方案数。
考虑如何计算 \(P_{t}\):将不同颜色组合起来。对于每一种颜色,单独计算它强制命中 \(t\) 个位置时的方案数,然后用乘法原理整合。
容易发现,可以利用卷积来进行对于不同颜色的整合。因此我们将每一种颜色 \(a\),将颜色 \(a\) 强制命中 \(t\) 个位置的方案数作为多项式中 \(x_{t}\) 的系数。
对于颜色 \(a\),有多项式:
于是按照乘法原理,将所有颜色的多项式作卷积,得到:
\(P_{t}\) 即为 \(P(x)\) 中 \(x^{t}\) 的系数。
分析复杂度瓶颈:由于最多有 \(n\) 种颜色,因此我们最多需要对 \(n\) 个多项式作卷积(也就是做 \(O(n)\) 次多项式乘法);而 NTT 优化多项式乘法的复杂度为 \(O(n\log n)\),故总复杂度看似是 \(O(n^{2}\log n)\)。但是我们需要发现一个重要性质:所有颜色出现的总次数固定为 \(n\),因此所有多项式的次数总和(即项数)恰好为 \(n\)。 于是,我们考虑用启发式合并思想优化卷积:每次选取当前项数最少的两个多项式作卷积,不断进行该过程直到只剩下一个多项式。这个与若干堆石子的启发式合并是完全等价的,每颗石子参与合并后所在集合大小至少是原来的 \(2\) 倍,故每颗石子最多参与 \(O(\log n)\) 次合并(\(n\) 表示石子总数),总复杂度为 \(O(n \log n)\)。
这里总复杂度会被优化至 \(O(n \log^{2} n)\)。

浙公网安备 33010602011771号