uoj1016 另解
题中给的是 AC 自动机的前半部分,那么建 fail 树,所有合法的 \(x\) 就是 \(u\) 在 fail 树上的祖先节点。
考虑 \(s_{a_i}=c_i\) 的限制在这些串的体现:\(s_x\) 的 \(a_i\) 位置相当于 \(s_u\) 的 \(|s_u|-|s_x|+a_i\) 位置。令 \(d_u=|s_u|-|s_{fail_u}|\),等于在 \(a_i\) 位置放一颗棋子,在串 \(s_u\) 上挪这个棋子,每次向后移动 \(d_x\) 格后令 \(x=fail_x\)。先不考虑 \(a_i\),将这个棋子涉及的位置写成一个 \(01\) 串 \(S\),那么 \(a_i\) 等于对 \(S\) 整体移动 \(a_i\) 格得到 \(S'\)。用 bitset 处理出 \(s_u\) 中 \(=c_u\) 的位置,将 \(S'\) 与其取交即可,对多个限制就取多次交。
视 \(n,q\) 同阶,时间复杂度 \(\mathcal O(\frac{n^2}{\omega})\)。对于空间问题,可以分块并且逐块统计落在 \([L,R]\) 位置中的贡献。
posted on 2025-12-24 08:44 nullptr_qwq 阅读(13) 评论(0) 收藏 举报
浙公网安备 33010602011771号