随笔分类 -  【后缀数组】

【总结】后缀数组
摘要:1、基本定义。子串:字符串S的子串r[i...j]。后缀:以i开始的后缀表示为Suffix(i)。大小比较:按字典序。后缀数组:SA是一个一维数组。将S的后缀从小到大排序后,后缀的开头位置顺次放入SA。(SA[i]=j:排在第i个的是Suffix(j))名词数组:Rank[i]是Suffix(i)在后缀中从小到大排列的名次。(Rank[i]=j:Suffix(i)排在第j个)后缀数组和名次数组为互逆运算:设Rank[i]=j,则SA[j]=i。2、倍增算法。目的:设字符串长度为n,在O(nlog2n)求出SA数组和Rank数组。 1 int wa[MAXN],wb[MAXN],wv[MAXN] 阅读全文
posted @ 2012-07-11 20:51 DrunBee 阅读(2684) 评论(0) 推荐(2)
【UVa】1223 Editor
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 #define MAXN 5010 6 char s[MAXN]; 7 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 8 int sa[MAXN],height[MAXN],rk[MAXN]; 9 inline bool cmp(int *r,int a,int b,int L)10 {11 return r[a]==r[b]&&r[a+ 阅读全文
posted @ 2012-07-11 20:27 DrunBee 阅读(433) 评论(0) 推荐(0)
【FOJ】2075 Substring
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 #define MAXN 100010 6 #define MAXM 20 7 char s[MAXN]; 8 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 9 int sa[MAXN],height[MAXN],rk[MAXN]; 10 int st[MAXM][MAXN],log2[MAXN]; 11 inline bool cmp(int *r,i 阅读全文
posted @ 2012-07-11 20:25 DrunBee 阅读(303) 评论(0) 推荐(0)
【UVa】760 DNA Sequencing
摘要:1 #include<cstdio> 2 #include<cstring> 3 #define MAXN 660 4 char s[MAXN]; 5 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 6 int sa[MAXN],height[MAXN],rk[MAXN]; 7 inline bool cmp(int *r,int a,int b,int L) 8 { 9 return r[a]==r[b]&&r[a+L]==r[b+L]; 10 } 11 void SA(int n,int m) 12 { 13 int 阅读全文
posted @ 2012-07-11 11:50 DrunBee 阅读(760) 评论(0) 推荐(0)
【UVa】11512 GATTACA
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 #define MAXN 1010 6 char s[MAXN]; 7 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 8 int sa[MAXN],height[MAXN],rk[MAXN]; 9 inline bool cmp(int *r,int a,int b,int L)10 {11 return r[a]==r[b]&&r[a+ 阅读全文
posted @ 2012-07-11 11:19 DrunBee 阅读(923) 评论(0) 推荐(0)
【POJ】3294 Life Forms
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 #define MAXN 1100 6 #define MAXL 200100 7 char str[MAXN][MAXN],s[MAXL]; 8 int wa[MAXL],wb[MAXL],wv[MAXL],ws[MAXL]; 9 int sa[MAXL],height[MAXL],rk[MAXL]; 10 int m,len[MAXN]; 11 inline bool cmp(int 阅读全文
posted @ 2012-07-11 10:39 DrunBee 阅读(333) 评论(0) 推荐(0)
【SPOJ】220 Relevant Phrases of Annihilation
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 #define MAXN 10010 6 #define MAXM 10 7 #define MAXL 100100 8 #define INF 123456789 9 char s[MAXL],str[MAXM][MAXN]; 10 int m,len[MAXM]; 11 int wa[MAXL],wb[MAXL],wv[MAXL],ws[MAXL]; 12 int sa[MAXL],h 阅读全文
posted @ 2012-07-10 23:23 DrunBee 阅读(387) 评论(0) 推荐(0)
【POJ】3415 Common Substrings
摘要:1 #include<cstdio> 2 #include<cstring> 3 typedef __int64 LL; 4 #define MAXN 200010 5 char s[MAXN]; 6 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 7 int sa[MAXN],height[MAXN],rk[MAXN]; 8 int stk[MAXN],cnt[MAXN]; 9 inline bool cmp(int *r,int a,int b,int len) 10 { 11 return r[a]==r[b]&& 阅读全文
posted @ 2012-07-10 20:02 DrunBee 阅读(354) 评论(0) 推荐(0)
【POJ】3693 Maximum repetition substring
摘要:1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 #define MAXN 100010 5 #define MAXM 20 6 char s[MAXN]; 7 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 8 int sa[MAXN],height[MAXN],rk[MAXN]; 9 int st[MAXM][MAXN],log2[MAXN]; 10 int len[MAXN]; 11 inline bool cmp(int *r,int a,int 阅读全文
posted @ 2012-07-08 23:54 DrunBee 阅读(420) 评论(0) 推荐(0)
【SPOJ】687 Repeats
摘要:1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 #define MAXN 50010 5 #define MAXM 20 6 char s[MAXN]; 7 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 8 int sa[MAXN],height[MAXN],rk[MAXN]; 9 int st[MAXM][MAXN],log2[MAXN]; 10 inline bool cmp(int *r,int a,int b,int len) 11 { 12 阅读全文
posted @ 2012-07-08 01:40 DrunBee 阅读(434) 评论(0) 推荐(0)
【URAL】1297 Palindrome
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 #define MAXN 2200 6 #define MAXM 12 7 char s[MAXN],t[MAXN]; 8 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 9 int sa[MAXN],rk[MAXN],height[MAXN]; 10 int st[MAXN][MAXM]; 11 inline bool cmp(int *r,int a, 阅读全文
posted @ 2012-07-05 21:44 DrunBee 阅读(365) 评论(0) 推荐(0)
【SPOJ】705 New Distinct Substrings
摘要:1 #include<cstdio> 2 #include<cstring> 3 typedef long long LL; 4 #define MAXN 50010 5 char s[MAXN]; 6 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 7 int sa[MAXN],height[MAXN],Rank[MAXN]; 8 inline bool cmp(int *r,int a,int b,int len) 9 {10 return r[a]==r[b]&&r[a+len]==r[b+len];11 }12 阅读全文
posted @ 2012-07-04 21:13 DrunBee 阅读(521) 评论(0) 推荐(0)
【POJ】3261 Milk Patterns
摘要:1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 #define MAXN 20010 5 int in[MAXN],a[MAXN]; 6 int ws[MAXN],wv[MAXN],wa[MAXN],wb[MAXN]; 7 int sa[MAXN],Rank[MAXN],height[MAXN]; 8 int n,k; 9 inline bool cmp(int *r,int a,int b,int len)10 {11 return r[a]==r[b]&&r[a+le 阅读全文
posted @ 2012-07-04 20:27 DrunBee 阅读(334) 评论(0) 推荐(0)
【POJ】1743 Musical Theme
摘要:1 #include<cstdio> 2 #include<algorithm> 3 #define INF 0x7FFFFFFF 4 #define MAXN 20010 5 using namespace std; 6 int a[MAXN]; 7 int wa[MAXN],wb[MAXN],sa[MAXN],wv[MAXN],ws[MAXN]; 8 int height[MAXN],Rank[MAXN]; 9 inline bool cmp(int *r,int a,int b,int len)10 {11 return r[a]==r[b]&&r 阅读全文
posted @ 2012-07-04 18:34 DrunBee 阅读(405) 评论(0) 推荐(1)
【HDU】1403 Longest Common Substring
摘要:1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define MAXN 200010 5 using namespace std; 6 char s[MAXN]; 7 int sa[MAXN],wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 8 int Rank[MAXN],height[MAXN]; 9 inline bool cmp(int *r,int a,int b,int len)10 {11 return r[a]==r[b]&&am 阅读全文
posted @ 2012-07-03 00:16 DrunBee 阅读(449) 评论(0) 推荐(0)