#include using namespace std;
const int maxn =100005*2;
/*字元要先轉化為正整數
待排序的字串放在r 陣列中,從r[0]到r[n-1],長度為n,且最大值小於m。
所有的r[i]都大於0,r[n]無意義演算法中置0
函式結束後,結果放在sa 陣列中(名次從1..n),從sa[1]到sa[n]。s[0]無意義
*/int cmp(int *r,int a,int b,int l)//
int wa[maxn],wb[maxn],wv[maxn],ws1[maxn];
void da(int *r,int *sa,int n,int m)//}/*
height[2..n]:height[i]儲存的是lcp(sa[i],sa[i-1])
rank[0..n-1]:rank[i]儲存的是原串中suffix[i]的名次
*/int rank[maxn],height[maxn];
void calheight(int *r,int *sa,int n)
int lcp(int i,int j)//原串中suffix[i]與suffix[j]的lcp
字尾陣列 模板
char s n 陣列的長度要為兩倍的 int n n全域性變數為字元陣列的長度的 int sa n 2 high n 2 rank n 2 tmp n 2 top n 2 void makesa void lcp int main gets s int len strlen s s len get...
字尾陣列模板
過了期末了,繼續寫acm題 自己寫的字尾陣列模板。k,len,rank,sa,tmp,都要寫在外面,這樣就不用來回折騰了。也是使用倍增法來做的,得到乙個sa,儲存了字尾排在第i位的字尾的起始位置。因為空也算乙個字尾,所以函式中都是 len include include include includ...
模板 字尾陣列
include include includeusing namespace std const int max 20001 int num max int sa max rank max height max int wa max wb max wv max wd max int cmp int ...