QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: jiangly

Posted at: 2026-03-06 01:29:28

Last updated: 2026-03-06 01:29:36

Back to Problem

题解

从后往前 DP,设 $f(i,j)$ 表示当前长度是 $i$,加号个数和减号个数的差是 $j$ 的方案数。则转移是 $f(i,j)=f(i-1,j+1)+f(i-1,j-1)$,然后如果 $i-1$ 在集合中,则 $f(i,i-2)$ 增加 $1$。要求的则是所有 $f(2n,0)$。

令 $F_i(x)=\sum_{j}f(i,j)x^j$,分治计算 $\{F_i(x)\}$。假设当前分治到区间 $[l,r]$,则 $F_l(x)$ 次数大于 $r-l$ 的部分不会对区间中的答案产生贡献,因此只需要乘上 $(x+x^{-1})^{r-l}$ 加到 $F_r(x)$ 即可。剩下的部分递归处理,返回的值由两部分组成:$F_l(x)$ 传入的部分对于 $F_r(x)$ 的贡献,以及 $[l,r]$ 中间新增加的部分,两部分的长度都不超过 $O(r-l)$,所以每次递归只需要进行 $O(r-l)$ 长度的卷积,总时间复杂度 $O(n\log^2n)$。

另一个做法

我们设 $f(i,n)$ 表示加减号各 $n$ 个且后缀至少有 $i$ 个减号的串的数量,$F_i(x)=\sum_{n} f(i,n)x^n$,则我们要计算的就是 $$ \sum_{i\in S}(F_i(x)-F_{i+1}(x)) $$ 而我们可以推出 $$ F_i(x)=\left(\frac{1-\sqrt{1-4x}}{2}\right)^i\frac{1}{\sqrt{1-4x}} $$ 这个式子可以这样考虑:首先末尾的 $i$ 个字符是减号,然后每次我们往前找到最短的且加号恰好比减号多一个的段,这一段一定是合法括号序列;当找到 $i$ 段后剩下的部分只要加减个数相等就可以。然后结合卡特兰数的生成函数就能得到上式。

令 $A(x)=\sum_{i\in S}(x^i-x^{i+1})$,则我们要求的就是 $A\left(\frac{1-\sqrt{1-4x}}2\right)\frac{1}{\sqrt{1-4x}}$,这可以通过以下几个步骤完成:

  • 将 $A$ 右复合 $\frac{x}{2}$ 得到 $A\left(\frac{x}{2}\right)$。

  • 将 $A$ 右复合 $1-x$ 得到 $A\left(\frac{1-x}{2}\right)$,这一步只需要卷积。

  • 将 $A\left(\frac{1-x}{2}\right)$ 右复合 $\sqrt{1-4x}$ 得到 $A\left(\frac{1-\sqrt{1-4x}}2\right)$,令 $A\left(\frac{1-x}{2}\right)=A_0(x^2)+xA_1(x^2)$,则 $$ A\left(\frac{1-\sqrt{1-4x}}2\right)=A_0(1-4x)+\sqrt{1-4x}A_1(1-4x) $$ 仍然只需要卷积。

  • 最后卷积上 $\frac{1}{\sqrt{1-4x}}$ 即可。

时间复杂度 $O(n\log n)$。

Comments

No comments yet.