P3735 [HAOI2017] 字符串 题解
首黑祭。
考察:AC 自动机,树状数组,线段树,差分,常数优化。
题目简述:
小 Z 收到了一个字符串
字符串
t 在字符串s 中出现的次数定义是s 中的不同的子串s' 满足s'\approx t 的个数。$s\approx t$ 指: 1. $|s|=|t|
\forall i,j\in[1,|s|]\cap\mathbb Z,s_i\ne t_i,s_j\ne t_j,|i-j|<k
数据范围:
-
|s|\le 2\times 10^5 -
\sum_{i=1}^n|p_i|\le2\times 10^5 我们把
s\approx t 的定义翻译一下,即:-
|s|=|t| -
\text{lcp}(s,t)+\text{lcs}(s,t)+k\ge|s| 这里,函数
\text{lcp}(s,t) 指的是s 和t 的最长公共前缀,\text{lcs}(s,t) 指的是s 和t 的最长公共后缀。
-
这就出现了类多模字符串匹配,掏出我们的 AC 自动机。
如果
注意到恰好不好计算,我们就采用差分思想。
若
那么我们遍历整棵树,将询问和修改挂到树上做就可以了,具体实现见代码。
代码