计数问题,但假如我只做多项式?

0.前言

事实上,作为一个神秘选手,我不太可能在考场上用到多项式板子。但是这并不影响我学习生成函数吧。真是非常的酷炫!

1.多项式全家桶!

\(O(n^2)\) 的。

多项式乘法、多项式除法取模

列竖式和大除法,没什么好说的。

多项式求逆、多项式开方

给定 \(A\),求 \(B\) 满足 \(A\times B\equiv 1 \pmod {x^n}\)
不考虑 \(A_0=0\) 的情况。
发现 \(B_0=\frac{1}{A_0}\)
然后对于 \(i>0\),有 \(\sum\limits_{j=0}^i A_jB_{i-j}=0\)。于是可以直接递推算出 \(B_i\)

多项式开方是一样的。

多项式求导、多项式积分

做到 \(O(n)\) 是简单的。

多项式 \(\ln\)、多项式 \(\exp\)

\[\ln A(x) = \int \frac{A'(x)}{A(x)} \, dx \]

先求导后积分。显然可以 \(O(n^2)\) 求出。

已知 \(A\),求 \(B=\exp A\)
求导后发现,\(B'=B\times A'\)。已知 \(B_0=0\)
展开系数。对于 \(k>0\),有:

\[[x^k]B'=\sum\limits_{i=0}^k [x^i]B\times [x^{k-i}]A' \]

即:

\[(k+1)[x^{k+1}]B=\sum\limits_{i=0}^k [x^i]B\times [x^{k-i}]A' \]

显然,可以直接递推求出。

2.模板题

无标号有根树计数

\[xT'(x)=T(x)+T(x)\sum\limits_{i=1}x^iT'(x^i) \]

请阅读 这篇文章 以获取最佳阅读体验。

书接上回。如何将其转化为可以 \(O(n^2)\) 递推的式子?

\(f_i=[x^i]T\)。顺便补充一下,在使用 \(\text{SEQ}\)\(\text{MSET}\) 构造时,我们不允许组合类中出现大小为 \(0\) 的组合对象,因此 \(x^0\) 的系数为 \(0\)。于是 \(f_0=0\)

有:

\[xT'(x)-T(x)=T(x)\sum\limits_{i=1}x^iT'(x^i) \]

左边:

\[\sum_{i=1} (i-1)f_ix^i \]

右边:

\[\begin{aligned}\sum\limits_{i=1}x^iT'(x^i)&=\sum\limits_{i=1}x^i\sum\limits_{k=1}kf_kx^{(k-1)i}\\&=\sum\limits_{i=1}\sum\limits_{k=1}kf_kx^{ki}\end{aligned} \]

因此,对于 \(k\geq 1\),有:

\[(k-1)f_k=\sum\limits_{i=1}f_i\sum\limits_{d|(k-i)}df_d \]

由于 \(x^0\) 系数已经为 \(0\),所以第一个求和有 \(k-1\) 的上界。于是得到:

\[f_k=\frac{1}{k-1}\sum\limits_{i=1}^{k-1}f_i\sum\limits_{d|(k-i)}df_d \]

这就是我们想要的东西了。

3.也许有些困难?

一道题

这个不能写啊。我不知道有没有版权问题。放在我带密码的一个文章里了。

十二重计数法

\(m\) 个盒子,\(n\) 个球。

  • 球不同,盒子不同。
    答案为 \(m^n\)

  • 球不同,盒子不同。每个盒子装至多一个球。
    \(n>m\) 则无解。\(n\leq m\) 就是先指定盒子,再排列。其实就是个排列数,答案为 \(A_m^n\)

  • 球不同,盒子不同。每个盒子装至少一个球。
    我已经忘记二项式反演了。枚举有 \(i\) 个盒子空了,答案显然为:

    \[\sum\limits_{i=0}^m (-1)^iC_m^i (m-i)^n \]

  • 球不同,盒子相同。
    第二类斯特林数 \(S_{n,m}\),表示的就是将 \(n\) 个不同的球划分成 \(m\) 个非空子集的方案数。
    于是直接做一个第二类斯特林数就可以了。

AT_abc456_g [ABC456G] Count Holidays

不🍳。

显然要处理出 \(f_i\),代表 \(0\) 连续段长度 \(\leq k\) 时,长度为 \(i\)\(01\) 序列的方案数。

组合类。

\[\mathcal{F}=\mathcal{E}+\{1,01,001,0001,0\dots01\}\times \mathcal{F} \]

其中最后一项有 \(k\)\(0\)。而且这样算的话,序列末尾一定会有一个 \(1\)。于是可以看作是将原本长度为 \(n\) 的数列末尾全部加上 \(1\),得到的刚好是 \(\mathcal{F}\) 中长度为 \(n+1\) 的数列,这是显然的,因为加上 \(1\) 不影响合法性。

直接写成 OGF,得到:

\[F(x)=\frac{x-1}{2x-1-x^{k+2}}=\frac{1-x}{1+x^{k+2}-2x} \]

倒数直接展开:

\[\begin{aligned}\frac{1-x}{1-2x+x^{k+2}} &= (1-x)\sum\limits_{i=0}(2x-x^{k+2})^i \\ &=(1-x)\sum\limits_{i=0}x^i(2-x^{k+1})^i\\&=(1-x)\sum\limits_{i=0}x^i\sum\limits_{j=0}^i (-1)^j2^{i-j} x^{(k+1)j} C_i^j\end{aligned} \]

现在要求其 \(x^n\) 项的系数,可以转化成求后面两重 \(\sum\)\(x^n\) 项和 \(x^{n-1}\) 项的系数。枚举后面的 \(j\),前面有贡献的 \(i\) 为定值。对于一个固定的 \(k\) 来说,合法的 \(j\) 只有 \(O(\lfloor\frac{n}{k+1}\rfloor)\) 个。对所有 \(k\) 求和,是 \(O(n\log n)\) 的。于是就做完了。

posted @ 2026-06-01 20:23  Just_int_mian  阅读(57)  评论(10)    收藏  举报