ACMer_ZP的博客

奔向自己的诗和远方

后缀自动机

clj大佬论文 自己对于后缀自动机的理解:每一个节点代表的是具有相同的right集合的子串(right集合的定义具体去看clj大佬的论文),整个最后构成的有向无环图,可以看成是一棵树,step[i]代表的是right[i]中子串的最长长度也就是论文中所说的Max(i),pre[i]代表的是i节点...

2017-09-21 17:51:55

阅读数 133

评论数 0

字符串hash

大佬博客 题目链接 题意:刚开始给定n个字符串,每一个字符串有一个权值,后面有q次询问,1代表将a字符串的权值改为吧,2为询问有多少个字符串的后缀包含a并且权值是小于等于a字符串的权值的。 思路:上面大佬的博客里面讲了字符串的hash,这道题预处理处每一个字符串的hash值,然后n^2统计出...

2017-07-24 18:37:16

阅读数 149

评论数 0

hdu 2243 AC自动机+dp(矩阵快速幂优化)

做这个之前建议做一下poj 2778 这道题要求长度小于等于m的字符串包含所给串的有多少种,可以算出所有的情况然后减去不包含所给串的情况就是所求的。 大佬博客 大佬博客 矩阵里面存的是从i节点到j节点走一步共有多少种走法(不能走题目上给的字符串)。 然后将这个矩阵m次幂就可以求出走m步(...

2017-07-07 17:38:47

阅读数 161

评论数 0

字符串的最大最小表示法

算法描述:给定一个字符串s,可以进行左循环(右循环)移位,总共的结果有strlen(s)种,在这些结果中最小的是那个,最大的是哪个。 详解描述 论文传送门 HDU3374 题目意思:给定一个字符串s求循环几次会是字典序最小的(最小表示),最大的(最大表示),分别会出现几次。 思路:第一个...

2017-07-05 11:50:41

阅读数 252

评论数 0

扩展KMP

详解链接 hdu4300题解链接#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int max...

2017-07-04 20:24:29

阅读数 144

评论数 0

Manacher算法--O(n)回文子串算法

马拉车算法详解地址#include<cstring> #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int p[2000010];//记录以s...

2017-07-04 15:31:41

阅读数 158

评论数 0

kmp

/* kmp的next数组存的是i之前的串的前缀和后缀的最长匹配长度 */ #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespa...

2017-07-04 10:15:03

阅读数 129

评论数 0

后缀数组(关于只出现一次的最短公共子串)

Codeforces 427 D. Match & Catch 题意:求两个字符串最短的公共子串,并且在两个串中是唯一出现的(只出现过一次); 题解 个人感觉讲的很好

2017-02-26 15:04:55

阅读数 156

评论数 0

后缀数组(不小于k个字符串中的最长子串)

POJ 3294 Life Forms 题意:输入n个DNA序列,你的任务是求出一个长度最大的字符串,使得它在超过一般的DNA序列中出现。如果有多解,按照字典序从小到大输入所有解,无解输出?。 思路:把所有的都连接起来,用不同的字符隔开,求其后缀数组和height数组,然后二分长度,按照长度分...

2017-02-20 18:43:25

阅读数 367

评论数 0

后缀数组(长度不小于k的公共子串的个数)

POJ 3415 Common Substrings 题意:长度不小于k的公共子串的个数; 思路:基本思路是计算A的所有后缀和B的所有后缀之间的最长公共前缀的长度,把最长公共前缀长度不小于k的部分全部加起来。 先将两个字符串连起来, 中间用一个没有出现过的字符隔开。按height值分组后,接下...

2017-01-18 18:10:12

阅读数 133

评论数 0

后缀数组( 连续重复子串)

POJ 2406 Power Strings 题意:给定一个字符串L,已知这个字符串是由某个字符串S重复R次而得到的,求R的最大值。 思路:先求出后缀数组,Rank数组,height数组,然后求出以每个字符开头的后缀,与原串的最长公共子串,如果长度等于以某个字符开头的后缀长度则总长度减去这个后...

2017-01-18 16:09:02

阅读数 212

评论数 0

后缀数组(重复次数最多的连续重复子串)

POJ3693:Maximum repetition substring题意:给定一个字符串,求重复次数最多的连续重复子串。思路:先穷举长度L,然后求长度为L的子串最多能连续出现几次。首先连续出现1次是肯定可以的,所以这里只考虑至少2次的情况。假设在原字符串中连续出现2次,记这个子字符串为S,那么...

2017-01-17 16:42:09

阅读数 179

评论数 0

后缀数组(可重叠的k次最长重复子串)

POJ3261:Milk Patterns 题意:给定一个字符串,求至少出现k次的最长重复子串,这k个子串可以重叠; 思路:这题的做法和上一题差不多,也是先二分答案,然后将后缀分成若干组。 不同的是,这里要判断的是有没有一个组的后缀个数不小于k。如果有,那么存在k个相同的子串满足条件,否则不存...

2017-01-17 09:50:33

阅读数 243

评论数 0

后缀数组(不可重叠最长重复子串)

poj 1743 二分答案,把题目变成判定性问题:判断是否 存在两个长度为k的子串是相同的,且不重叠。解决这个问题的关键还是利用 height数组。把排序后的后缀分成若干组,其中每组的后缀之间的height值都 不小于k。 有希望成为最长公共前缀不小于k的两个后缀一定在同一组。然 后对...

2016-12-14 21:29:23

阅读数 238

评论数 0

后缀数组

#include//sa为后缀数组,把后缀从小到大排序把后缀开头存起来,rank为名次数组,以i开头的后缀在所有后缀中排第几 #include #include #include #include #define F(x) ((x)/3+((x)%3==1?0:tb)) #define G(x) ...

2016-10-27 16:21:56

阅读数 157

评论数 0

字典树

#include #include #include #include using namespace std; const int N=2*1e5+10; int n,m,q,k,j; struct Dictree//字典树 { int cont;//单词出现次数 struct ...

2016-10-18 19:52:43

阅读数 126

评论数 0

AC自动机

#include #include #include #include #include using namespace std; struct node { int Next[500010][26];//数组存图 int fail[500010];//fail指针 int...

2016-10-18 18:26:22

阅读数 223

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭