组合结构符号化
参考自 x义x 的同名博客。
一、无标号计数
-
定义 1.1(组合类):组合类是一个集合 \(\mathcal A\) 和一个附带的大小函数 \(f:\mathcal A\to\mathbb N\)(记 \(f(a)\) 为 \(|a|\) 或 \(|a|_{\mathcal A}\))。
它需要满足对于任意 \(n\in\mathbb N\),\(\mathcal A_n:=\{a\in\mathcal A:|a|=n\}\) 都是有限集(从而 \(\mathcal A\) 是至多可数集)。
组合类中的元素被称作组合对象。
定义 \(\mathcal A\) 的计数序列为 \((A_n)_{n=0}^{\infty}\) 满足 \(A_n:=\operatorname{card}\mathcal A_n\)。
-
定义 1.2(计数序列的 OGF):设组合类 \(\mathcal A\) 的计数序列为 \((A_n)_{n=0}^{\infty}\)。定义 \((A_n)_{n=0}^{\infty}\) 的 OGF 为形式幂级数:
\[A(z):=\sum_{n\in\mathbb N}A_nz^n \]容易看出,上述定义和下面是等价的:
\[A(z):=\sum_{a\in\mathcal A}z^{|a|} \] -
定义 1.3(笛卡尔积):设 \(\mathcal B,\mathcal C\) 是组合类。定义它们的笛卡尔积 \(\mathcal B\times\mathcal C\) 的大小函数满足对于任意 \((b,c)\in \mathcal B\times\mathcal C\) 有 \(|(b,c)|_{\mathcal B\times\mathcal C}:=|b|_{\mathcal B}+|c|_{\mathcal C}\)。
-
引理 1.4:设 \(\mathcal B,\mathcal C\) 是组合类,\(\mathcal A=\mathcal B\times\mathcal C\)。那么 \(A(z)=B(z)C(z)\)。
笛卡尔积的组合意义是:将两个组合类中的组合对象有序地拼在一起。
- 定义 1.5(不交并):设 \(\mathcal B,\mathcal C\) 是组合类且 \(\mathcal B\cap \mathcal C=\varnothing\)。定义它们的无交并 \(\mathcal B\cup \mathcal C\) 的大小函数满足对于任意 \(a\in\mathcal B\cup \mathcal C\) 有 \(|a|_{\mathcal B\cup \mathcal C}:=\begin{cases}|a|_{\mathcal{B}}&a\in \mathcal B\\|a|_{\mathcal C}&a\in\mathcal C\end{cases}\)。
- 定义 1.6(和):设 \(\mathcal B,\mathcal C\) 是组合类。定义它们的和为 \(\mathcal B+\mathcal C:=(\mathcal E_1\times\mathcal B)\cup(\mathcal E_2\times\mathcal C)\),其中 \(\mathcal E_1,\mathcal E_2\) 是两个不同的、仅包含一个大小为 \(0\) 的组合对象的组合类。
- 引理 1.7:设 \(\mathcal B,\mathcal C\) 是组合类且 \(\mathcal B\cap\mathcal C=\varnothing\),\(\mathcal A=\mathcal B\cup \mathcal C\)。那么 \(A(z)=B(z)+C(z)\)。
- 引理 1.8:设 \(\mathcal B,\mathcal C\) 是组合类,\(\mathcal A=\mathcal B+ \mathcal C\)。那么 \(A(z)=B(z)+C(z)\)。
和的组合意义是:区分所属组合类地将两个组合类合并。
- 定义 1.9(有序列表构造):设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\)。定义它的有序列表构造为 \(\operatorname{SEQ}(\mathcal B):=\bigcup_{l\in\mathbb N}\mathcal B^l\)。
- 引理 1.10:设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\),\(\mathcal A=\operatorname{SEQ}(\mathcal B)\)。那么 \(A(z)=\frac{1}{1-B(z)}\)。
有序列表构造的组合意义是:用同一组合类内的若干组合对象有序地拼在一起。
-
定义 1.11(映射群):映射群是由映射构成的集合、且在复合运算下构成群。
-
定义 1.12(等价类):设 \(\mathcal B\) 是组合类,\((G_n)_{n=0}^{\infty}\) 是映射群列,满足 \(G_n\) 中的元素是定义域和对应域都是 \(\{b\in \mathcal B:|b|=n\}\) 的映射。
称 \(b_1,b_2\in\mathcal B\) 本质相同(记为 \(b_1\equiv b_2\)),当且仅当 \(|b_1|=|b_2|\) 且存在 \(g\in G_{|b_1|}\) 使得 \(g(b_1)=b_2\)。
容易证明本质相同关系是自反、对称、传递的。
定义组合类 \(\mathcal B/G:=\{\{b_2\in\mathcal B:b_1\equiv b_2\}:b_1\in\mathcal B\}\),即所有等价类构成的集合。
对于 \(S\in \mathcal B/G\) 定义 \(|S|_{\mathcal B/G}\) 为 \(S\) 中任一组合对象的大小,注意与 \(|S|\) 区分。
-
定义 1.13(环构造):设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\)。定义它的环构造为 \(\operatorname{CYC}(\mathcal B)=(\operatorname{SEQ}(\mathcal B)\setminus \{()\})/G\)。其中 \(G_n\) 是所有 \(n\) 元组上的循环位移构成的群。
-
引理 1.14:设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\),\(\mathcal A=\operatorname{CYC}(\mathcal B)\)。那么:
\[A(z)=\sum_{k\geq 1}\frac{\varphi(k)}{k}\ln\frac{1}{1-B(z^k)} \]其中 \(\varphi\) 是数论上的欧拉函数。
证明:考虑使用 Burnside 引理。先枚举序列长度 \(n\),再枚举循环位移的步数 \(d\),可得:
\[A(z)=\sum_{n\geq 1}\frac{1}{n}\sum_{d=1}^nB(z^{n/\gcd(d,n)})^{\gcd(d,n)} \]其中 \(B(z^s)\) 相当于把同一个组合对象复制为 \(s\) 份。转为枚举 \(k=n/\gcd(d,n)\) 和 \(g=\gcd(d,n)\):
\[\begin{aligned} A(z)&=\sum_{k\geq 1}\sum_{g\geq 1}B(z^k)^{g}\frac{1}{kg}\sum_{d=1}^{kg}[\gcd(d,kg)=g]\\ &=\sum_{k\geq 1}\frac{\varphi(k)}{k}\sum_{g\geq 1}\frac{B(z^k)^g}{g}\\ &=\sum_{k\geq 1}\frac{\varphi(k)}{k}\left.\left(\int\frac{1}{1-x}\right)\right|_{x=B(z^k)}\\ &=\sum_{k\geq 1}\frac{\varphi(k)}{k}\left.\left(\ln\frac{1}{1-x}\right)\right|_{x=B(z^k)} \end{aligned} \]
环构造的组合意义是:用同一组合类内的若干组合对象拼成一个环。
-
定义 1.15(可重集构造):设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\)。定义它的可重集构造为 \(\operatorname{MSET}(\mathcal B)=\operatorname{SEQ}(\mathcal B)/G\),其中 \(G_n\) 是所有 \(n\) 元置换。
-
引理 1.16:设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\),\(\mathcal A=\operatorname{MSET}(\mathcal B)\)。那么:
\[A(z)=\prod_{i\geq 1}\left(\frac{1}{1-x^i}\right)^{B_i} \]证明:相当于将 \(\mathcal B\) 中的每个组合对象先做一次 \(\operatorname{SEQ}\),再笛卡尔积组合起来。
-
引理 1.17:设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\),\(\mathcal A=\operatorname{MSET}(\mathcal B)\)。那么:
\[A(z)=\exp\left(\sum_{i\geq 1}\frac{B(z^i)}{i}\right) \]证明:代数上,可以将引理 16 中的式子先取 \(\ln\) 再取 \(\exp\) 得到。
组合意义上,仍然考虑 Burnside 引理。先枚举序列长度 \(n\),再枚举置换 \(g\),设 \(g\) 环分解得到 \((a_i)_{i=1}^m\),那么:
\[A(z)=\sum_{n\geq 1}\frac{1}{n!}\sum_g\prod_{i=1}^mB(z^{a_i}) \]其实就是很经典的用环刻画排列,这里略去具体过程,最后即可得到原式。
可重集构造的组合意义是:用同一组合类内的若干组合对象拼在一起,只关注每种组合对象的出现次数(无序)。
-
例 1.18:设 \(\mathcal T\) 是所有无标号有根树构成的组合类,那么应当有:
\[\mathcal T=\mathcal Z\times \operatorname{MSET}(\mathcal T) \]其中 \(\mathcal Z\) 是仅包含一个大小为 \(1\) 的组合对象的组合类。它在这里的意义是树的根。
-
定义 1.19(染色):设有限集 \(\mathcal M=\{1,\cdots,m\}\) 和作用在 \(\mathcal M\) 上的置换群 \(G\)。设 \(\mathcal B\) 是组合类。\(\mathcal M\to \mathcal B\) 的映射被称为染色。
称两个染色 \(\phi_1,\phi_2\in\mathcal B^{\mathcal M}\) 本质相同,当且仅当存在 \(g\in G\) 使得 \(\phi_1\circ g=\phi_2\)。类似定义等价类集合 \(\mathcal B^{\mathcal M}/G\)。
设 \(\mathcal B\) 还附带一个权重函数 \(w\)。那么定义一个染色 \(\phi\in\mathcal B^{\mathcal M}\) 的权重为 \(w(\phi)=\prod_{n\in\mathcal M}w(\phi(n))\)。
显然同一个等价类中的染色的权重都是相同的,将其定义为该等价类的权重。
-
引理 1.20(Polya 定理):设有限集 \(\mathcal M=\{1,\cdots,m\}\) 和作用在 \(\mathcal M\) 上的置换群 \(G\)。设 \(\mathcal B\) 是组合类,附带权重函数 \(w\)。那么:
\[\sum_{\phi\in \mathcal B^{\mathcal M}/G}w(\phi)=Z\left(G;\sum_{b\in \mathcal B}w(b),\cdots,\sum_{b\in\mathcal B}w^m(b)\right)\\ Z(G;x_1,\cdots,x_m)=\frac{1}{|G|}\sum_{g\in G}x_1^{j_1(g)}\cdots x_m^{j_m(g)} \]其中 \(j_i(g)\) 表示 \(g\) 的环分解中中大小为 \(i\) 的环的个数。
证明:咕。
-
例 1.21:取 \(w(b):=1\),得到:
\[|\mathcal{B}^{\mathcal M}/G|=\frac{1}{|G|}\sum_{g\in G}|\mathcal B|^{c(g)} \]其中 \(c(g)=\sum j(g)\) 表示环分解中环的个数。
其含义是计算本质不同染色方案的数量。
-
例 1.22:取 \(w(b):=z^{|b|}\),得到:
\[\sum_{\phi\in\mathcal B^{\mathcal M}/G}w(\phi)=Z(G;B(z),\cdots,B(z^m)) \]其含义是计算每种本质的染色方案的颜色大小之和的生成函数。
-
例 1.23:取 \(G_m\) 为所有 \(m\) 元置换,得到:
\[\sum_{m\geq 0}\sum_{\phi\in\mathcal B^{\{1,\cdots,m\}}/G_m}w(\phi)=\exp \left(\sum_{i\geq 1}\frac{1}{i}\sum_{b\in\mathcal B}w^i(b)\right) \]其含义是在 \(\mathcal B\) 中无序地选若干个可以重复的物品,这些物品的大小和的生成函数。
二、有标号计数
-
定义 2.1(有标号的组合对象):称一个组合对象(这里为了直观默认为图)是弱标号的,当且仅当它的每一个节点都附带一个互不相同的正整数标号。
你可以理解为,这个组合对象附带了一个函数 \(f\),其中 \(f_i\) 表示第 \(i\) 个节点的标号(注意这里我们并没有具体定义第 \(i\) 个节点是什么,但目的只是将所有节点区分开来)。
称一个大小为 \(n\) 的组合对象是(强)标号的,当且仅当它是弱标号的,且所有节点的标号恰好构成 \(1,\cdots,n\) 的一个排列。
首先要注意的是,将一个大小为 \(n\) 的无标号的组合对象附上标号,所得到的有标号的组合对象的数量并不一定是 \(n!\)。比如对一棵 “两点一边” 的无标号树标号后只能形成一种有标号树。
-
定义 2.2(离散化):定义弱标号组合对象 \(a\) 的离散化为强标号组合对象 \(\rho(a)\),使得所有节点的标号大小关系仍然不变。
-
定义 2.3(计数序列的 EGF):设组合类 \(\mathcal A\) 的计数序列为 \((A_n)_{n=0}^{\infty}\)。定义 \((A_n)_{n=0}^{\infty}\) 的 EGF 为形式幂级数:
\[A(z):=\sum_{n\in\mathbb N}A_n\frac{z^n}{n!} \]容易看出,上述定义和下面是等价的:
\[A(z):=\sum_{a\in\mathcal A}\frac{z^{|a|}}{|a|!} \]
本章我们仅讨论由有标号的组合对象形成的组合类,所讨论的生成函数均为 EGF。
-
定义 2.4(标号积):设 \(\mathcal B,\mathcal C\) 是组合类,\(b\in\mathcal B,c\in\mathcal C\)。
定义 \(b,c\) 的标号积为组合类 \(b\star c:=\{(b',c'):(b',c')\text{是强标号的},\rho(b')=b,\rho(c')=c\}\),其大小函数定义为 \(|(b',c')|:=|b|+|c|\)。
定义 \(\mathcal B,\mathcal C\) 的标号积为组合类 \(\mathcal B\star \mathcal C:=\bigcup_{b\in\mathcal B,c\in\mathcal C}b\star c\)。
-
引理 2.5:设 \(\mathcal B,\mathcal C\) 是组合类,\(\mathcal A=\mathcal B\star\mathcal C\)。那么 \(A(z)=B(z)C(z)\)。
标号积的组合意义是:将两个组合类中的组合对象有序地拼在一起,并重新分配标号、使得维持在原组合类中的标号大小关系。
- 定义 2.6(有序列表构造):设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\)。定义它的有序列表构造为 \(\operatorname{SEQ_{\star}}(\mathcal B):=\bigcup_{l\in\mathbb N}\mathcal B^l\)。这里 \(\mathcal B\) 的幂以 \(\star\) 为基础定义。
- 引理 2.7:设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\),\(\mathcal A=\operatorname{SEQ_\star}(\mathcal B)\)。那么 \(A(z)=\frac{1}{1-B(z)}\)。
有序列表构造的组合意义是:用同一组合类内的若干组合对象有序地拼在一起,并重新分配标号、使得维持在原组合类中的标号大小关系。
-
定义 2.8(集合构造):设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\)。定义它的集合构造为 \(\operatorname{SET}(\mathcal B)=\operatorname{SEQ_\star}(\mathcal B)/G\),其中 \(G_n\) 是所有 \(n\) 元置换。
-
引理 2.9:设 \(\mathcal B\) 是组合类且 \([z^0]B(z)=0\),\(\mathcal A=\operatorname{SET}(\mathcal B)\)。那么 \(A(z)=\exp B(z)\)。
证明:枚举 \(b\in \mathcal B\) 出现了 \(i\) 次,但由于这 \(i\) 个 \(b\) 应当是不加区分的,而给它们标号时会重复计算 \(i!\) 次,所以要除掉:
\[\begin{aligned} A(z)&=\prod_{b\in\mathcal B}\sum_{i\geq 0}\frac{\left(\frac{z^{|b|}}{|b|!}\right)^i}{i!}\\ &=\prod_{b\in\mathcal B}\exp\left(\frac{z^{|b|}}{|b|!}\right)\\ &=\exp \left(\sum_{b\in\mathcal B}\frac{z^{|b|}}{|b|!}\right)\\ &=\exp B(z) \end{aligned} \]或者另一种组合意义的解释:考虑一个带标号的 \(n\) 元组,由于已经带上标号了,所以它们之间是两两相互区分的,那么这种重标号的 “set” 肯定会被恰好计算 \(n!\) 次,所以应当有:
\[A(z)=\sum_{n\geq 0}\frac{B(z)^n}{n!}=\exp B(z) \]
集合构造的组合意义是:用同一组合类内的若干组合对象拼在一起,并重新分配标号、使得维持在原组合类中的标号大小关系,同种重标号的 “set” 仅会被算一次。
-
定义 2.10(选根):设 \(\mathcal B\) 是组合类。定义它的选根为 \(\operatorname{PT}(\mathcal B):=\bigcup_{n\geq 0}\mathcal B_n\times \mathbb Z_{1..n}\)。其中 \(\mathbb Z_{1..n}\) 的大小函数满足 \(|i|_{\mathbb Z_{1..n}}=0\)。
-
引理 2.11:设 \(\mathcal B\) 是组合类,\(\mathcal A=\operatorname{PT}(\mathcal B)\)。那么 \(A(z)=B'(z)z\)。
证明:\(A(z)=\sum_{i\geq 1}i B_iz^i=B'(z)z\)。
选根的组合意义是:在组合对象中选择一个特殊节点。
-
定义 2.12(复合):设 \(\mathcal B,\mathcal C\) 是组合类。定义它们的复合为 \(\mathcal B\circ \mathcal C=\sum_{n\geq 0}0(\mathcal B_k)\times \operatorname{SET}_k(\mathcal C)\)。其中 \(0(\mathcal B_k)\) 为将 \(\mathcal B_k\) 的大小函数设置为恒等于 \(0\) 后的结果。
-
引理 2.13:设 \(\mathcal B,\mathcal C\) 是组合类,\(\mathcal A=\mathcal B\circ \mathcal C\)。那么 \(A(z)=(B\circ C)(z)\)。
证明:\((B\circ C)(z)=\sum_{n\geq 0}B_n\frac{C(z)^n}{n!}\),其中 \(\frac{C(z)^n}{n!}\) 的组合意义是选出一个包含恰好 \(n\) 个 \(\mathcal C\) 中组合对象并重标号的 “set”,然后由于 “set” 中的元素是两两区分的,那么直接把它们当成标号即可。
复合一般要求 \(\mathcal B\) 中的组合对象的标号不能有大小关系的限制,否则其组合意义不好解释。它的结构一般有明显的分层。可以通过下面这几个例子来理解:
-
例 2.14:记 \(\mathcal C\) 为所有有标号序列形成的组合类,那么 \(C(z)=\sum_{n\geq 0}\frac{n!}{n!}z^n=\frac{1}{1-z}\)。
于是 \(\mathcal A=\operatorname{SEQ_\star}(\mathcal B)=\mathcal C\circ \mathcal B\),且 \(A(z)=\frac{1}{1-B(z)}=C(B(z))\)。
-
例 2.15:记 \(\mathcal C\) 为所有有标号环形成的组合类,那么 \(C(z)=\sum_{n\geq 1}\frac{(n-1)!}{n!}z^n=\sum_{n\geq 1}\frac{z^n}{n}\)。
于是 \(\mathcal A=\operatorname{CYC_\star}(\mathcal B)=\mathcal C\circ \mathcal B\),且 \(A(z)=\sum_{n\geq 1}\frac{B(z)^n}{n}\)。
-
例 2.16:记 \(\mathcal C\) 为所有有标号无序集合形成的组合类(注意,由于是无序集合,所以这里的标号仅是为了区分它们,所以仅有一种标号方式),那么 \(C(z)=\sum_{n\geq 1}\frac{1}{n!}z^n=e^z\)。
于是 \(\mathcal A=\operatorname{SET}(\mathcal B)=\mathcal C\circ \mathcal B\),且 \(A(z)=\exp B(z)\)。
三、集合幂级数
咕。
例题
【ZJOI2018】树
题意:
随机生成 \(k\) 棵大小为 \(n\) 的有标号有根树,其中标号要求父亲比儿子小,求这 \(k\) 棵树同构的概率。
\(n\leq 2000\),\(k\leq 10^9\)。
题解:
一开始的想法是用有标号计数来做,但其实你发现由于它是要对每个无标号有根树 \(b\) 求标号方案 \(w(b)\) 的 \(k\) 次方之和,所以还不太一样,这里我们按照题意考虑构造一种生成函数。
注意 \(w(b)\) 并不是拓扑序的数量,因为点本来是不区分的,比如 “一个根两个儿子” 这棵三个点树只有一种标号方案而非两种。
首先考虑对两棵无标号有根树 \(b_1,b_2\) 分配标号方案,方案数为 \(w(b_1,b_2)=\binom{|b_1|+|b_2|}{|b_1|}w(b_1)w(b_2)\),那么 \(\left(\frac{w(b_1,b_2)}{(|b_1|+|b_2|)!}\right)^k=\left(\frac{w(b_1)}{|b_1|!}\right)^k\left(\frac{w(b_2)}{|b_2|!}\right)^k\),于是考虑构造生成函数:
记 \(f(b)=\left(\frac{w(b)}{|b|!}\right)^k\),它就是一个组合对象的 “权”。那么 \(B(z)=\sum_{b\in\mathcal B}f(b)z^{|b|}\)。
现在考虑分析一棵树的构造。
定义 \(\mathcal A=\operatorname{SUBT}(\mathcal B)\) 为将 \(\mathcal B\) 中的若干棵无根树拼成另一个点的所有子树。这其实和有标号中的集合构造很像,但有个 \(k\) 次幂:
定义 \(\operatorname{RT}(\mathcal A)\) 为将 \(\mathcal A\) 中拼出来的若干棵子树加上根。显然 \(\mathcal B\) 就是 \(\operatorname{RT}(\mathcal A)\)。那么应当有:
我们需要对 \(A(z)\) 做进一步的化简,使得它与 \(B(z)\) 关联上:
记 \(\ln\sum_{i\geq 0}\frac{x^i}{i!^k}=\sum_{j\geq 1}g_jx^j\),那么:
这一步看起来就推不下去了。
但实际上,发现如果我们要推导 \(\sum_{b\in\mathcal B}\left(f(b)z^{|b|}\right)^j\) 的话,其实和刚刚 \(B(z)\) 的推导是类似的,因为 \(f(b)\) 本来就是 \(\frac{w(b)}{|b|!}\) 的幂的形式。结合另一个可以预见到的原因(在这串式子下面有讲),正解是将 \(k\) 也当成了变量放到了角标下,然后:
显然 \(B_{jk}(z)\) 只需要 \(\frac{n}{j}\) 项,而且 \(A_{jk}(z)\) 递归下去的 \(B_{j'jk}(z)\) 也仍然只需要 \(\frac{n}{j'j}\) 项。所以需要计算的 \(j\) 是有限的。具体来说:
- \([z^m]B_{jk}(z)\) 依赖于 \([z^{m-1}]A_{jk}(z)\),对所有 \(m\) 总计算耗时 \(O(\frac {n}{j})\)。
- \([z^m]\sum_{j'\geq 1}g_{jk,j'}B_{j'jk}(z^{j'})\) 依赖于所有 \(j'|m\) 的 \([z^{m/j'}]B_{j'jk}(z)\),对所有 \(m\) 总计算耗时 \(O(\frac{n}{j}\log\frac{n}{j})\)。
- 计算 \(A_{jk}(z)=\exp \sum_{j'\geq 1}g_{jk,j'}B_{j'jk}(z^{j'})\) 使用暴力递推式 exp,总计算耗时 \(O((\frac{n}{j})^2)\)。
总时间复杂度 \(O(\sum_{j=1}^n(\frac{n}{j})^2)=O(n^2)\)。
【ABC230H】Bullion
题意:
有 \(n\) 种物品,第 \(i\) 种重量为 \(w_i\)。
一个非空的袋子,可以装若干个物品(每种物品可以装任意多个)和若干个非空的袋子,但不能啥也不装。其重量为装的东西的总重加一。
对 \(i=1,\cdots,W\) 求非空袋子总重为 \(i\) 的方案数。
\(n,W\leq 2\times 10^5\)。
题解:
组合类分析后,容易得到下式:
我们要求 \(B(z)\) 的前 \(n\) 项系数。
我们先解决另一个问题:已知 \(C_n=\sum_{i=0}^n A_iB_{n-i}\),而 \(C_n\) 可以推出 \(A_{n+1},B_{n+1}\),求 \(C_{0,\cdots,n-1}\)。
该问题被称为全在线卷积,处理方法是倍增。假设我们已经知道了 \(A,B,C\) 前 \(n\) 项系数,现在想求它们前 \(2n\) 项系数。我们先直接卷积得到 \(A_{0,\cdots,n-1}\times B_{0,\cdots,n-1}\) 对 \(C_{n,\cdots,2n-1}\) 的贡献,然后剩下要算的只有 \(A_{0,\cdots,n-1}\times B_{n,\cdots 2n-1}\) 和 \(B_{0,n-1}\times A_{n,2n-1}\) 的贡献。于是转化为两个半在线的问题,可以用分治 NTT \(O(n\log^2n)\) 解决。总时间复杂度 \(O(n\log ^2n+\frac{n}{2}\log^2\frac{n}{2}+\cdots)=O(n\log^2n)\)。
然后上面那个问题也是类似处理。