随笔分类 - 字符串----AC自动机
摘要:Pro: https://www.luogu.com.cn/problem/CF1437G 给定一个大小为n的字符串集合,每个字符串有一个初始为0的权值 支持以下q次操作 1.把第个字符串的权值改为 2.给定一个字符串s,求出字符串集合中所有在s中出现过的字符串的权值的最大值 Sol:
阅读全文
摘要:AC自动机的基本流程 先用所有模式串建立一颗Trie树 然后去计算Trie树每一个节点的fail指针(失配后应该转移到哪个节点) 同时额外补一些边,把Trie树改为Trie图 建立AC自动机的代码 解释一下这个补边是什么操作 比如这棵Trie树 先考虑没有额外补边的情况 如果在9号节点尝试沿着k边走
阅读全文
摘要:https://www.luogu.com.cn/problem/P5319 把题目要求最大化的那个式子,取一手对数,然后就变成了一个分数规划问题。 二分后AC自动机上DP即可。 // luogu-judger-enable-o2 #include<bits/stdc++.h> #define N
阅读全文
摘要:pro: sol: 建出ac自动机。 一个合法的答案对应一条路径满足从一个scc走到另一个scc的路径。 发现这个题的方案数有可能是无限的。 会在以下两种情况无限: 因此,去掉无限情况后,环只有简单环,缩点以后随便dp一下即可。
阅读全文
摘要:AC自动机技巧 可以用树上的一些算法来进行优化 对于要求支持插入和删除字符串的题目,可以通过建两个AC自动机,查询的时候作差来实现。 当给出的查询串是一个含有空格的文本时,可以用特殊字符(比如'z'+1)来替换掉空格。
阅读全文
摘要:首先,可以发现这样一个性质 x在y中出现过=======y的某个前缀的后缀等于x。 先把AC自动机建出来后。 y的每一个前缀就是它在trie树上所遍历到的每一个点。 check这个点的后缀是否等于x也就是看沿着fail指针向上能否走到x。 这也就等价于这个点在x的子树中。 考虑去如何加速这个过程。
阅读全文