模板 字尾陣列

2021-06-26 12:57:18 字數 833 閱讀 4964

#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 *r, int a, int b, int l)

void da(int *r, int n, int m)

}}void calheight(int *r, int n)

}int main()printf("\n");

printf("sa: \n");

for(i=0;i<=len;i++)printf("\n");

printf("rank: \n");

for(i=0;i<=len;i++)printf("\n");

printf("height: \n");

for(i=0;i<=len;i++)printf("\n");

}return 0;

}

這裡num[0~n-1]為有效值 就是輸入的字串稍稍轉化而成的陣列

sa[1~~n]為有效值  sa[i]=a則代表排在第 i 位的是第a個字尾。  a屬於[0~~n-1]

rank[0~~n-1]是有效值  rank[i]=b則代表第 i 個字尾排在第b位   b屬於[1~~n]

height[2~~n]是有效值  height[i]=c 則代表排在第 i 位的字尾和排在第i-1的字尾的最長字首長度是c。

字尾陣列 模板

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...

字尾陣列模板

字尾陣列的模板,這樣說明就很詳細了吧!字尾陣列模板 倍增法 使用方法 1 讀取字串轉換成int陣列,長度為len,下標從0開始 2 在字串末尾加一字典序最小字元,一般為0,並找到最大的字元設為maxa 3 呼叫函式da num,sa,len 1,maxa 1 求得的sa陣列的含義 sa i 為第i字...