[学习笔记] 回文自动机~PAM
摘要:算法 每个结点代表一个本质不同回文串。
tr[u][c]:表示回文串
u两边加
c字符所构成的回文串。
fail[u]:回文串
u的最长严格后缀回文串。 增量法每次加入
i前缀里最长回文串,可以证明次长的都在前面的前缀里出现过了,也就是说本质不同回文串(节点数
阅读全文
[BJOI2017]魔法咒语
摘要:descibtion 给你
n个元素串和m个诅咒串,问你能构造长度为
L的字符串的方案数,字符串由元素串拼接而成且不包含诅咒串。
n<=50,m<=50,元素串总长和诅咒串总长均<=100,L<=108 但是这是一道需要数据点分治的题,具体看下面的数据范围 Solution 前60pt
阅读全文
【AC自动机】背单词
摘要:题意: 0 s v:添加价值为v的字符串s 1 t:查询t中含的s的权值和。(不停位置算多次) 思路: 在线AC自动机。 同学用过一个妙妙子的分块算法。 这里用二进制分组:通常用作把在线数据结构问题转离线 即当前有n个串。然后按n的二进制分成(
<=log2n)个AC自动机分别维护答案。 e
阅读全文
[NOI2011]阿狸打字机
摘要:题意:一开始是个空串s,有三种操作:(1.末尾加一个字符 2.末尾减一个字符 3.存储该字符串) 思路: 一开始在trie树上动态加点很好处理,3操作的时候记录一下此时trie树上的pos,同时记录dep,fa后面有用。 建AC自动机,因为这道题的大致思路还是:y包含于x,则x的所有前缀(trie树
阅读全文
[TJOI2013]单词
摘要:题意:给n个字符串,问每个字符串在所有串里出现几次。 思路:判断一个整串与其它串之间的包含关系通常用AC自动机。fail树是我们想象中的树,但是它可以帮助我们更好的理解AC自动机。 1.fail树上的每个前缀都对应fail树里面的节点。通常节点存cnt[]表示有多少个串经过该点(即多少个前缀) 2.
阅读全文
[SDOI2014] 数数
摘要:题意:问有多少个<=n(
101201)的数满足下面所给的模式串没有在其中出现过 思路:首先一堆串没在构造的串中,套路就是AC自动机上dp,不经过cnt[]>0的点。 不过<=n怎么做呢?从n范围容易想到数位dp。 不过有一种更巧妙的方法: 首先位数<n,每位没有限制 (类似康托展开:每
阅读全文
[CF1073G]LCP问题
摘要:题意:给一个长n的字符串S,q组询问,每组给两个集合A,B。求集合A中的点和集合B中的点所有组合情况的lcp的和。 思路: 好像比较常规,可是代码能力差还是调了1.5h。主要还是虚树板子不熟(加入的时候点要去重) SAM+虚树+虚树上dp 两个后缀的lca相当于后缀树上两个对应节点的LCA的len。
阅读全文
SAM[详细~bushi][学习笔记]
摘要:基础性质概念 后缀自动机:S的SAM是个DAG,每个节点叫状态,每条带字符ch边表示+ch转移,从开始节点往下,任何一条路径都会对应一个S的子串。 不过为什么要叫"后缀"自动机呢? endpos集合:endpos(s)={s的所有右端点}[s为S的一个子串] 状态(节点):把endpos{}相同的等
阅读全文
CF 1015F
摘要:题意:[CF 1015F](https://codeforces.com/contest/1015/problem/F) 给你一个模式串A(一个不一定合法的括号序列),让你构造长度为2*n的合法括号序列,问有多少种方案使得含A为其子串。(n<=100) 思路: KMP+DP $dp[i][j][k]
阅读全文
[JSOI2008]火星人
摘要:题意:P4036 Q x y:计算LCQ(x,y)就是从x开始的后缀与y开始的后缀的最长公共前缀 R x d:将第x个改为d I x d:在x后面加入d 思路 如果我们想到了字符串哈希(是一种可加可减,很全面的算法)。 然后我们又想到了二分,这道题就完了! 可惜我都没想到! 然后二分后,判断我们发现
阅读全文
[补漏]shift&算法
摘要:题意:regular number 给你一个字符串,要你输出所有(每位都符合要求的)子串,输入时告诉你每位只能填的数集。 思路: bitsetc存每个数字可以存在的字符串位的二进制集合。(如3可以在字符串第0,3,5出现则为:101001) bitsetdp第i位表示当前位开始往前i位是否合法。 d
阅读全文
可持久化trie
摘要:魔板 可持久化数据结构是一种保存历史版本的数据结构。 维护指针
p,
q,
p表示当前新加入版本(一开始在新建的根上),
q表示便历上一个版本的节点。
p从新根开始便历
p 向
q 所拥有的点连边,然后在添加上新字符串版本自己新有的节点。同时记录
cnt[],
阅读全文
[学习笔记] AC自动机
摘要:魔板 思想: 相当于在trie树上的KMP。 流程: 1.构建trie树 注意0为根会方便很多。 2.get_fail() 虽然和KMP很相似,我举一反三的能力有限,所以还是要重新讲qwq fail[i]:表示满足i为结尾的后缀与rt开始的前缀匹配的最大长度。 求法为了无后效性,用BFS(按层遍历)
阅读全文