ACM-后缀数组
但求-_-心安
充满鲜花的世界到底在那里,如果他真的存在那么我一定会去。
展开
-
poj 2217 Longest Common Substring
开始用dp自己做了一下,果断错了,看清题意。。是连续字串。。。后来了解了下后缀数组,果然简单。改了两个小时的bug,mdzz崩了。最终对了。。 后缀数组的两个小时改bug也没白改,起码懂了,后缀数组是通过sa数组记录每一个字母到最后一个数组的字典序排序,如果把每一个字符串都分开用string类型来储存,就用很大的空间来储存, 高度数组是排好序的两个数有公共的最长前缀是多长用lcp来存储。 #原创 2016-11-08 13:20:53 · 299 阅读 · 0 评论 -
POJ 3581 Sequence
首先将字符串翻转,求后缀数组,得到一个最小后缀,当然这个最小后缀的起始点应该在原串的倒数第二个位置之前,不然无法分成三段 然后对于剩下的字符串,相当于是要分成2份然后字典序最小,对于这个,我一开始想用最小表示法的那个线性方法来求,后来发现这样可能会出现不切分的情况,也就是这个字符串的字典序已经是最小的了 于是我把剩余字符串重复一次接到一起,然后再求一次后缀数组,这样就求出了每一个字符串表示原创 2016-11-08 21:11:10 · 382 阅读 · 0 评论 -
POJ 3415 Life Forms 给定n个字符串,求出现在不小于k个字符串中的最长子串。
给定两个字符串A和B,求长度不小于k的公共子串的个数(可以相同) 这个题要用到手工模拟的单调栈。首先这个题如果暴力应该怎么解决。例如: 2 aaa Aaaa 中间加个z 他的高度数组应该是 0 ‘\0’ 0原创 2017-10-01 17:17:31 · 371 阅读 · 0 评论 -
poj 1226 Substrings (二分+后缀数组)
#include #include #include using namespace std; #define N 100005 int T,t,n,m,la,Max,ans; char a[N],s[N]; int *x,*y,X[N],Y[N],c[N],sa[N],height[N],rank[N]; int str[N],is_end[N],flag[N]; void clear()原创 2017-10-02 12:03:05 · 225 阅读 · 0 评论 -
poj 3261 Milk Patterns(刷题)
#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LS 2*i #define RS 2*原创 2017-10-02 12:07:53 · 187 阅读 · 0 评论