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

「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}](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}](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)\) 再得到最终答案即可