21.4.2 t3

tag:组合计数,生成函数


\(p\) 为一个长度为 \(n\) 的序列,\(p_i\)\([1,K]\) 中随机,设 \(a_i\)\(i\) 出现的次数,求 \(E(a_1^F\cdot a_2^F\cdots a_L^F)\)

\(n,K\leq10^9,\ F\leq10^3,\ L\cdot F\leq 5\cdot10^4,\ mod=2003\)


先考虑 \(F=1\) 时。设 \(x_{i,j}=[p_i=j]\),则:

\[a_i=\sum_{j=1}^nx_{i,j} \]

\[E=E(\Pi_{i=1}^L(x_{i,1}+x_{i,2}+\cdots+x_{i,n})) \]

考虑它的意义,对于每个值 \(i\),选一个位置 \(j\),且所有值所选的位置不能相同,一个方案的权值为 \((\frac{1}{K})^L\)。所以

\[ans=(\frac 1K)^L\binom nLL! \]


拓展到一般情况,设\(f(i)=(x_{i,1,1}+x_{i,1,2}+\cdots+x_{i,1,n})(x_{i,2,1}+x_{i,2,2}+\cdots+x_{i,2,n})\cdots(x_{i,F,1}+x_{i,F,2}+\cdots+x_{i,F,n})\)

\[E=\Pi_{i=1}^L f(i) \]

那这个式子的意义是什么呢?原来是给每个值选 \(1\) 个位置,而现在就是给每个值选 \(F\) 个位置。对于一个值来说,选取的位置可以重复,而两个不同的值所选取的位置必须两两不同,且一个方案的权值为 \((\frac1K)^t\)\(t\) 为一共选择的不同的位置数。


先考虑只选择一个值,设 \(f_{i,j}\) 为选了 \(i\) 个位置,其中有 \(j\) 个不同的位置。则有:

\[f_{i,j}=f_{i-1,j-1}+f_{i-1,j}\cdot j \]

即当前可以新选一个位置,或者选择选过的 \(j\) 种位置中的一个。那么对于一个权值来说,选出 \(x\) 个不同的位置的方案为 \(f_{F,x}\)


扩展到选择 \(L\) 个值。容易发现 \(f_{i,j}\) 与当前考虑哪个值无关,所以可以用生成函数。

\(f(x)=\sum f_{F,x}x^i\),那么答案的生成函数就是 \(f^n(x)\)。然后还要乘上分配位置的方案数 \(\binom ntt!\)。所以答案为:

\[ans=\sum_{t=1}^{L*F}\binom ntt!(\frac 1K)^t[x^t]f^n(x) \]

注意到其中有一个系数为 \(t!\),而 \(t\geq2003\) 时,\(t!\equiv 0\ (mod\ 2003)\)。所以实际上只需要保留 \(f^n(x)\) 的前 \(2003\) 项,可以不用 FFT

复杂度 \(O(F^2+mod^2logn)\)

posted @ 2021-06-26 14:03  oisdoaiu  阅读(30)  评论(0编辑  收藏  举报