建立新图,原图中每条边在新图中是点,点权为$w_i$,边权为两个字符串的LCP。 对字典树进行DFS,将每个点周围一圈边对应的字符串按DFS序从小到大排序。 根据后缀数组利用height数组求LCP的原理,类似地可以得到: 令$h_i=LCP(str_i,str_{i+1})$,则$LCP(str_ ...
分类:
其他好文 时间:
2017-11-14 18:36:41
阅读次数:
201
class SF { //N:数组大小 public: int x[N], y[N], c[N]; int Height[N], str[N], SA[N], Rank[N];//Height数组从2开始,SA记录Rank=i的下标 int slen; int m = 1050;//字符集处理大小(... ...
分类:
编程语言 时间:
2017-11-12 14:55:50
阅读次数:
142
1031: [JSOI2007]字符加密Cipher Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考。一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的信息排成一圈,显然,它们有很多种不同的读法。例如下图,可以读作: JSOI07 SOI07J OI07JS ...
分类:
编程语言 时间:
2017-11-11 16:41:32
阅读次数:
216
后缀数组是处理字符串的有力工具。————罗穗骞 ·前面的言 在后缀树,后缀自动机以及后缀数组三者中似懂非懂地抉择之后,综合代码量和实用性方面的考虑,你选择了学习后缀数组。本文会像往常一样,以更加朴素和便于理解的方式来献出大米饼自己对于后缀数组的理解。 ·LCP——一个问题的引入 LCP(Longes... ...
分类:
编程语言 时间:
2017-10-29 23:09:16
阅读次数:
359
【BZOJ5073】[Lydsy十月月赛]小A的咒语 题解:沙茶DP,完全不用后缀数组。 用f[i][j]表示用了A的前i个字符,用了j段,最远能匹配到哪。因为显然我们能匹配到的地方越远越好,所以我们直接判断A[i]和B[f[i][j]]是否相等,如果相等则转移下去。还要记录g[i][j]表示第i个 ...
分类:
其他好文 时间:
2017-10-29 15:58:36
阅读次数:
173
kmp就直接略过吧 AC自动机,后缀数组,回文树,……(后续待学) AC自动机 模板 例题 http://www.cnblogs.com/HITLJR/p/7560161.html 2016沈阳 后缀数组 模板 1 const int maxn = 800005; 2 int sa[maxn],t[ ...
分类:
其他好文 时间:
2017-10-18 18:18:49
阅读次数:
212
题意 给一个长度不超过200000的字符串s,假定有一个字符串a,这个字符串在s中出现次数是f(a),你需要让$|a|f(a)$最大。 但是有一些位置是禁止的,即以该位置为结束位置的字符串不计数。 分析 先不考虑禁止的位置 那么可以求出后缀数组,枚举每一个height[i]作为|a|,向两边扩展,看 ...
分类:
编程语言 时间:
2017-10-14 18:24:03
阅读次数:
165
题意:给一个字符串,求它不同的子串的个数 方法:后缀数组,答案是sum(n-sa[i]+height[i]) 代码: ...
分类:
其他好文 时间:
2017-10-09 23:57:37
阅读次数:
390
namespace SA{char s[N];int sa[N],t1[N],t2[N],num[N];int n;void buildsa(int m){ int *x=t1,*y=t2; for(int i=0;i<m;i++) num[i]=0; for(int i=0;i<n;i++) nu ...
分类:
编程语言 时间:
2017-10-08 20:25:53
阅读次数:
195