摘要:
首先把这些串排成一排(中间用随便什么符号隔断一下),然后跑一遍后缀数组。 我们把这些后缀排序后,发现一段区间可以对答案有贡献当且仅当 \(n\) 个字符串的任意位置都在这个区间出现过,然后 \(two\_point\) 跑一遍,可以用你喜欢的数据结构维护 \(height\) 的最小值。 代码: # 阅读全文
摘要:
OI Wiki 一些重点: 后缀自动机形成的图是一个DAG(许多题可以利用这个性质DP) 这个DAG上的任意一条路径是一个子串 endpos等价类可以由parent树的子树合并得到(再加上这个节点本身) 注意后缀自动机的源点代表空串,很多题需要单独处理 例题: luogu P3804 【模板】后缀自 阅读全文
摘要:
当 \(t=0\) 时:考虑 \(dp[i]\) 表示到了后缀自动机上的点 \(i\),往后走还能形成多少子串。转移很显然:\(dp[i]=1+\sum dp[nxt_i]\)。加一是因为可以直接停下,\(nxt_i\) 代表 \(i\) 到 \(nxt_i\) 有一条边。然后想主席树之类的查询就可 阅读全文
摘要:
每个子串的出现次数就是其后缀自动机上所在节点的endpos等价类集合的大小。 代码: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N= 阅读全文