、

P10004 [集训队互测 2023] Permutation Counting 2

题意

给出 \(n\) 和 \(m\in \mathbb{P}\),对于所有 \(x,y\in \{ 0,1, \ldots ,n-1 \}\),有多少个长度为 \(n\) 的排列满足(对 \(m\) 取模):

\[\sum_{i=1}^{n-1}[p_i<p_{i-1}]=x \]

\[\sum_{i=1}^{n-1}[p^{-1}_{i}<p^{-1}_{i-1}]=y \]

其中 \(p^-1\) 为 \(p\) 的逆排列。

\(n\le 500\)

二项式反演

对于 \(n\) 个有标号元素,我们设 \(f_n\) 表示恰好使用 \(n\) 个元素满足特定结构的方案数。\(g_n\) 表示从这 \(n\) 个元素中选出若干个元素满足特定结构的方案数。显而易见的:

\[g_n=\sum_{i=0}^n\binom{n}{i}f_i \]

有的时候在 \(g_n\) 好求的时候我们希望去求 \(f_i\),则需要去反演,有公式:

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

证明

\[f_n=\sum_{i=0}^n\binom{n}{i}(-1)^{n-i}\sum_{j=0}^i\binom{i}{j}f_j \]

\[f_n=\sum_{i=0}^n\sum_{j=0}^i\binom{n}{i}\binom{i}{j}(-1)^{n-i}f_j \]

\[f_n=\sum_{j=0}^nf_j\sum_{i=j}^n\binom{n}{i}\binom{i }{j}(-1)^{n-i} \]

由组合数性质 \(\binom{n}{r}\binom{r}{k}=\binom{n-k}{r-k}\) 有:

\[f_n=\sum_{j=0}^nf_j\sum_{i=j}^n\binom{n-j}{i-j}(-1)^{n-i} \]

令 \(k=i-j\),则

\[f_n=\sum_{j=0}^n f_j\sum_{k=0}^{n-j}\binom{n-j}{k}(-1)^{n-j-k} \]

又因为 \(\sum_{i=0}^n(-1)^{n-i}\binom{n}{i}=(1-1)^n=[n=0]\),那么

\[f_n=\sum_{i=0}^n f_j [n-j=0]=f_n \]

常用形式

至少

有的时候对于一个 \(g\),我们希望令它为至少选出 \(x\) 个满足某些特殊结构的方案,即

\[g_x=\sum_{i=x}^n\binom{x}{i}f_i \]

则有

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

至多

即为上方证明的那个式子。

高维(二维)

对于

\[g_{a,b}=\sum_{c\le a}\sum_{d\le b}\binom{a}{c}\binom{b}{d}f_{c,d} \]

有

\[f_{a,b}=\sum_{c\le a}\sum_{d\le b}\binom{a}{c}\binom{b}{d}(-1)^{(a-c)+(b-d)}g_{c,d} \]

实际上,因为每一维都是独立的所以可以这么拼起来分析,对于再高维也是一样的。

思路

对于这种 \(n\) 个元素恰有 \(k\) 个的问题可以考虑二项式反演。设 \(g_{i,j}\) 表示至少 \((i,j)\) 个上升,那么根据二项式反演,我们有答案 \(f_{i,j}\) 为

\[f_{i,j}=\sum_{a\ge i}(-1)^{a-i}\binom{a}{i}\sum_{b\ge j}(-1)^{b-j}\binom{b}{j}g_{a,b} \]

只需要 \(\mathcal{O}(n^3)\) 预处理一个 \(s_{j,a}=\sum_{b\ge j}(-1)^{b-j}\binom{b}{j}g_{a,b}\) 即可 \(\mathcal{O}(n^3)\) 求出 \(f_{i,j}=\sum_{a\ge i}(-1)^{a-i}\binom{a}{i}s_{j,a}\) 即可。关键在于如何去求 \(g_{i,j}\)。

考虑对于 \(p^{-1}\) 的一个连续段 \([l,r]\)。如果它上升说明它在序列中出现的位置也是上升的。那么我们考虑如果 \([l,r]\) 中的元素在 \(p\) 的同一个上升段中出现,那么它们之间一定没有 \(p^{-1}\) 上升段的其它元素,这是因为 \([l,r]\) 代表的就是值域,它们都在这里出现那么值域就不可能符合递增的规律了。所以它们在 \(p\) 的这个连续段的位置就可以被直接确定掉。记连续段的答案 \(c_{n-i,n-j}=g_{i,j}\)。

这就给了我们思路,我们只需要去考虑一个矩阵 \(c\),其中 \(c_{x,y}\) 表示 \(p\) 的第 \(x\) 个连续段中的元素在 \(p^{-1}\) 的第 \(y\) 个出现了几个即可唯一对应一个排列。

考虑 \(c\) 的要求。我们发现只需要保证对于每一行和每一列的和都不能为空且所有元素的总和为 \(n\) 即可满足条件。现在转为对这个计数。

我们发现,总和为 \(n\) 的方案数是非常简单的,只需要隔板法就可以知道答案是 \(\binom{n+ij-1}{ij-1}\),记为 \(c^\prime_{i,j}\),那么我们发现这个也是可以钦定的,所以有:

\[c^\prime_{i,j}=\sum_{a\le i}\binom{a}{i}\sum_{b\le j}\binom{b}{j}c_{a,b} \]

同样反演

\[c_{i,j}=\sum_{a\ge i}(-1)^{a-i}\binom{a}{i}\sum_{b\ge j}(-1)^{b-j}\binom{b}{j}c^\prime_{a,b} \]

那么用上面同样 \(s\) 的方法就可以优化到 \(\mathcal{O}(n^3)\) 了,

posted @ 2026-09-24 14:44  tanghg  阅读(3)  评论(0)    收藏  举报