随笔分类 - 字符串算法-AC自动机
摘要:"题目链接" 手写一下AC自动机(我可没说我之前不是手写的) Trie上dp,每个点的贡献加上所有是他后缀的串的贡献,也就是这个点到根的fail链的和。 cpp include include include include using namespace std; const int MAXK =
阅读全文
摘要:"题目链接" AC自动机上dp第一题嗷。 如果直接求可读文本的数量,显然要容斥,不好搞。 于是考虑求不可读文本的数量,再用$26^m$减去其即可。 建出AC自动机,如果一个节点为单词结尾或其fail链中有节点为单词结尾,那么这个点就不能走,这个显然可以在bfs的时候顺便求出来。 然后就是大家熟知的方
阅读全文
摘要:"题目链接" 这么多字符串,肯定是自动机啦。 先建出AC自动机,然后怎么表示一个安全代码没有病毒代码呢? 就是存在一条路径不经过有病毒代码段结尾的节点呗。 所以呢?有环啊!dfs一下救星了。 cpp include include include include using namespace st
阅读全文
摘要:把单词连起来,中间插入间隔符, "同" cpp include include include using namespace std; struct Node{ int fail, next[27], num; }AC[200010]; int n, u, cnt; queue q; int p[
阅读全文
摘要:每次匹配都不停跳fail显然太慢了,于是在每个节点和fail指向的点连一条边,构成一棵树,在这棵树上差分一下就好了。 AC自动机 就这个算法而言其实没用想象中那么难。 cpp include include include using namespace std; struct Node{ int
阅读全文


浙公网安备 33010602011771号