随笔分类 - 【后缀数组】
【总结】后缀数组
摘要: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]
阅读全文
【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+
阅读全文
【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
阅读全文
【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
阅读全文
【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+
阅读全文
【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
阅读全文
【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
阅读全文
【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]&&
阅读全文
【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
阅读全文
【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
阅读全文
【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,
阅读全文
【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
阅读全文
【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
阅读全文
【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
阅读全文
【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
阅读全文
浙公网安备 33010602011771号