「字符串算法」第5章 AC自动机
- A. 【例题1】单词查询:AC自动机模板。
- B. 【例题2】单词频率:注意单词会重复。洛谷上同一题需要进一步优化,
fail
不能再一步一步跳了。 - C. 【例题3】前缀匹配:匹配文本串,标记经过的点,最后再把每个模式串再匹配一下更新答案。
- D. 【例题4】屏蔽词删除:不需要跳
fail
;查找屏蔽词时用栈,每次找到后就回溯。 - E. 【例题5】病毒代码:记病毒代码段的终止点是非法点,那么就只需要判断是否存在一个不经过非法点的环,且存在从0节点到这个环不经过非法点的路径,用
dfs
判断,注意要用两个数组标记,非法点可以在计算fail
时线性转移。 - F. 1.组合攻击:AC自动机+DP。
dp[i][j]
表示前i个字符,停在了j
点的分数,显然通过相邻节点转移,统计答案时要把所有子串的贡献加上,即不断地跳fail
,直到不能再跳为止。 - J. 5.文本生成器:AC自动机+DP。用容斥的思想,计算不可读的文本数量,最后用总数减去。
dp[i][j]
表示前i个字符,停在了j
点的不可行的方案数。