tyvj 1860 字尾陣列

2022-08-04 21:27:16 字數 1001 閱讀 6313

真·模板題(然而還是tle了,tyvj真是個毒瘤,輸出double什麼的就是 -0.00000000,這些就tle2333)

簡單的說一下本蒟蒻看了一天字尾陣列的收穫(這東西太神了,,,wcwc,,收穫到我的膝蓋233,還是不太理解這個神奇的東西)(鑑於本人太虛,只看了一下倍增,照著黃學長扒了乙個板子23333)

一共有3個神奇的陣列,sa(sufiix array),rank,height

對於前兩個陣列的求法,用基數排序的方法,每次搞出長度為2^i(除了最後,,)的子串的rank,然後用這些子串(當前長度為2^i和下乙個),來更新出長度為2^(i+1)的子串

所以,一共是進行了log(strlen(ch))次的。

裡面有一些小細節自己yy一下就好了,(吐槽,各種各樣的sa[v[rank[..]..].]太噁心了2333)

1 #include2

#define n 100005<<2

3#define ll long long

4#define inf 0x3f3f3f3f

5using

namespace

std;

6 inline int

ra()710

while (ch>='

0' && ch<='

9')

11return x*f;12}

13char

ch[n];

14int

n,k,p,q;

15int a[n],rank[2][n],sa[2

][n],height[n],v[n];

16void cal_sa(int sa[n], int rank[n], int sa[n], int

rank[n])

1724

void

get_height()

2536}37

}38void

work()

3948

intmain()

49

tyvj 1860 字尾陣列入門題

描述 description 我們定義乙個字串的字尾suffix i 表示從s i 到s length s 這段子串。字尾陣列 suffix array sa i 中存放著乙個排列,滿足suffix sa i 你的任務就是求出sa和height這兩個陣列。字串長度 200000 輸入格式 input...

TyvjP1860 字尾陣列

描述 我們定義乙個字串的字尾suffix i 表示從s i 到s length s 這段子串。字尾陣列 suffix array sa i 中存放著乙個排列,滿足suffix sa i suffix sa i 1 按照字典序方式比較 定義height i 表示suffix sa i 與suffix ...

Tyvj P1860 字尾陣列 字尾陣列模板題

tyvj傳送門 輸入格式 一行,為描述中的字串 僅會出現小寫字母 輸出格式 共兩行,每行n個數,第一行為sa i 第二行為height i 其中每行的數均用空格隔開 測試樣例1 輸入aabaaaab 輸出4 5 6 1 7 2 8 3 0 3 2 3 1 2 0 1 sol 發現了自己程式的乙個bu...