随笔题解 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$:
- $f_0(a)$ 为 $a$ 中所有元素的和
- 对于 $i \gt 0$
- 如果 $S_i = \texttt{a}$,$f_i(a)$ 为 $a$ 的所有 子区间(连续) 上的 $f_{i - 1}$ 的函数值的和
- 如果 $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)$。