随笔题解 Pb. 9

yukicoder contest 426 G. Sum of Subarray of Subsequence of…

注意:本题解的记号可能与原题面存在出入。

给你一个长度为 $N$ 的序列 $A$ 和一个长度为 $M$ 的字符串 $S$。$S$ 只包含 $\texttt{a}$ 和 $\texttt{s}$ 两种字符。

设 $a$ 为一序列。如下定义一系列函数 $f_0, f_1, \dots, f_M$:

  1. $f_0(a)$ 为 $a$ 中所有元素的和
  2. 对于 $i \gt 0$
    1. 如果 $S_i = \texttt{a}$,$f_i(a)$ 为 $a$ 的所有 子区间(连续) 上的 $f_{i - 1}$ 的函数值的和
    2. 如果 $S_i = \texttt{a}$,$f_i(s)$ 为 $a$ 的所有 子序列(不一定连续) 上的 $f_{i - 1}$ 的函数值的和

让你求出 $f_M(A)$。对 $998244353$ 取模。

$1 \leqslant N, M \leqslant 10^5$。$0 \leqslant A_i \lt 998244353$。

$\texttt{4s/512MiB}$。


不难发现,$f_i(a)$ 一定是 $a$ 中所有元素的某种带权和。

考虑设 $\lambda_i(x, y)$ 表示对于一个长度为 $x + y + 1$ 的序列 $a$,$f_i(a)$ 里 $a_{x + 1}$ 的权值。即

至于为什么下标要写成这样,因为这样更直观:$a_{x + 1}$ 的左侧有 $x$ 个其他元素,右侧有 $y$ 个其他元素。

边界条件是

再令 $\lambda_i$ 的 OGF 为

如果 $S_i = \texttt{a}$

如果 $S_i = \texttt{s}$

我们想要求的是 $\Lambda_M(x, y)$ 的系数。

考虑从 $\Lambda_i(\tilde x, \tilde y)$ 到 $\Lambda_{i - 1}(\tilde x, \tilde y)$ 的过程。这里 $\tilde x$ 和 $\tilde y$ 表示到这一步的时候的实际的自变量。

首先会在柿子里面留下一个

然后如果 $S_i = \texttt{s}$,两个自变量会分别变成

手玩以下可以发现,上面这个过程如果说进行了 $l$ 次,两个自变量会变成

这里的 $x, y$ 表示一开始代进 $\Lambda_M$ 的两个自变量。

然后每次再柿子里留下的那一部分会变成

并且到 $\Lambda_0$ 还没完。所以你可以想象后面还有一个 $\Lambda_{-1} \equiv 1$。

那么结论就是,存在 $r_0, r_1, \dots, r_{M + 1}$ 使得

最后的答案就是

然后你会发现 $x$ 和 $y$ 的部分完全分开了。而且两部分其实长得一模一样。

中间那两坨我们可以用分治 + NTT 的技巧求解。时间复杂度 $\Theta(N \log_2^2 N)$。

评测记录

评论