
字符串---AC自动机
forezxl
水君一枚
展开
-
AC自动机算法简介(洛谷P3808)
给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。如果直接跑n遍KMP的话时间复杂度会较高(O(nm)),这时AC自动机算法便应运而生。原创 2017-08-12 15:26:05 · 980 阅读 · 0 评论 -
BZOJ2434: [NOI2011]阿狸的打字机(洛谷P2414)
AC自动机 树状数组BZOJ题目传送门 洛谷题目传送门可以发现整个操作过程就是建立一颗Trie树。而查询第x个打印的字符串在第y个打印的字符串中出现的次数其实就是查询有多少个y的节点的fail指针指向在x的结束节点。我们把fail树建起来,把y都打上1,就会发现询问变成在x结束节点所在的子树和。那么dfs序之后用树状数组维护一下就好了。代码:#include<queue...原创 2018-03-29 17:58:02 · 212 阅读 · 0 评论 -
BZOJ3172 [Tjoi2013]单词(洛谷P3966)
AC自动机BZOJ题目传送门 洛谷题目传送门不得不说fail树太神奇了。每次插入一个单词时把所有路径上的点都+1,每个单词的出现次数就是其结尾节点的fail树子树和。因为其fail指针指向的节点一定包含当前字符串。统计贡献时要从下往上加,所以最好BFS的时候保存其BFS序后倒着搞。代码:#include&lt;queue&gt;#include&lt;cstdio&gt...原创 2018-07-17 18:57:55 · 605 阅读 · 0 评论