字尾陣列模板(詳細理解)

2021-07-22 05:30:16 字數 628 閱讀 4221

字尾陣列看了很久了,從基數排序開始看乙隻看到height陣列的實現也理解了很多東西,不過別人的東西再多也不是自己的,因此自己重新總結了一下,順便學乙個字尾陣列的模板備用,這裡以spoj 694為例。

#include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1e5+5;

char s[maxn];

int sa[maxn],t[maxn],t2[maxn],c[maxn];

int rank[maxn],height[maxn];

void build_sa(int n,int m)

}void getheight(int n)

}int main()

#ifdef local

printf("time: %d\n", int(clock() - _time_jc));

#endif // local

return

0;}

字尾陣列的理解於模板

字尾陣列主要是得出 sa i pos 排名第i的是pos位置開始的 這裡用於排名的都是原串中以不同位置開始到最後的字串按照字典序排序 height i 是 suffix sa i 1 和 suffix sa i 的最長公共字首長度,即排名相鄰的兩個字尾的最長公共字首長度。原理可以參考 解釋 incl...

字尾陣列 模板

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