「2020noip模拟题-蒋凌宇」幂

Analysis

计算$x$出现的次数,可以转化为枚举每一个$x$,计算剩余$n-1$个位置合法括号序列个数

因此我们只需要计算合法括号序列个数

定义一个辅助计数:不可分割 的合法括号序列

这样的括号序列,满足:其恰好为$x$,或者序列两端是一对匹配的左右括号

而实际要求的括号序列 的就是这样的 不可分割括号序列 去掉两端的匹配括号

Solution

设$a_n$为长度为$n$的不可分割 的合法括号序列数量

括号序列并非排列问题,因此我们用普通生成函数计算

设$\text{OGF(a)}=A(x)$,$A(x)$容易发现$A(x)$满足下面的递归式

$\displaystyle A(x)=x^2(\sum_{i=0}^{\infty} A^i(x))+x^1$

其中$x^2$表示在外层加一对匹配括号,$\sum_{i=0}^{\infty} A^i(x)$枚举子括号中的分裂段,$x^1$表示单个$x$

容易得到下面的化简过程

$\displaystyle A(x)=\frac{x^2} {1-A(x)}+x$

$A(x)-A^2(x)=x^2+xA(x)$

$A^2(x)-(x+1)A(x)+x^2+x=0$

带入求根公式,得到$A(x)$的 收敛形式

$\displaystyle A_1(x)=\frac{x+1+\sqrt{-3x^2-2x+1} } {2},A_2(x)=\frac{x+1-\sqrt{-3x^2-2x+1} } {2}$

令$\displaystyle F(x)=-3x^2-2x+1,G(x)=\sqrt{F(x)}$

容易手玩发现:$[x^0]G(x)=1$

而根据定义,我们知道$[x^0]A(x)=0$,因此$A(x)=A_2(x)$

接下来我们要求$\displaystyle G(x)=F^\frac{1} {2}(x)$

下面介绍对于短多项式$F(x)$,设$\text{deg}(F(x))=m$,有理数$k(k\ne 1)$

求解$G(x)=F^k(x)$的前$n$项的$O(m^2+nm)$递推做法

变形

$G(x)=F^k(x)$

$\displaystyle G’(x)=kF^{k-1}(x)F’(x)$

$G’(x)F(x)=kF^k(x)F’(x)$

$G’(x)F(x)=kG(x)F’(x)$

求解递推式

对于等号两边,考虑$[x^n]$一项的系数,容易求出$F’(x)=-6x-2$

$\displaystyle \sum_{i=0}^m [x^{n-i}]G’(x)F_i=k\sum_{i=0}^{m-1}[x^{n-i}]G(x)F’_i$

$\displaystyle \sum_{i=0}^m x^{n-i+1}G(x)F_i=k\sum_{i=0}^{m-1}[x^{n-i}]G(x)F’_i$

$\displaystyle (n+1)[x^{n+1}]G(x)=k\sum_{i=0}^{m-1}[x^{n-i}]G(x)F’_i-\sum_{i=1}^m x^{n-i+1}G(x)F_i$

带入这题的$k$,得到

$\displaystyle [x^n]=\frac{3(n-3)[x^{n-2}]+(2n-3)[x^{n-1}]} {n}$

递推边界$[x^0]G(x)=1,[x^1]G(x)=-1$

然后由$G(x)$得到$A(x)$再得到最终答案即可