LUOGU 3089 字尾排序(模板)

2021-08-21 15:13:01 字數 728 閱讀 1792

傳送門

這是乙個神奇的演算法,sa[i]表示排名第i為的元素是啥,rk[i]表示第i個元素排名是啥。然後使用基數排序+倍增的思想去處理。主要是參考的這位大佬的部落格(

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1e6+5;

int sa[maxn],x[maxn],y[maxn];

int num,c[maxn],n,m;

int rk[maxn],height[maxn];

char s[maxn];

inline

void get_sa()

if(num==n) return;

m=num;

}}inline

void get_height()

for(register

int i=1;i<=n;i++)

cout

<" ";

}int main()

get_sa();

for(register

int i=1;i<=n;i++)

printf("%d ",sa[i]);

// get_height();

return

0;}

luogu3804 模板 字尾自動機

題目描述 給定乙個只包含小寫字母的字串 s 請你求出 s 的所有出現次數不為 1 的子串的出現次數乘上該子串長度的最大值。輸入輸出格式 輸入格式 一行乙個僅包含小寫字母的字串 s 輸出格式 乙個整數,為 所求答案 輸入輸出樣例 輸入樣例 1 複製 abab 輸出樣例 1 複製 4 說明 對於 10 ...

模板 字尾排序(SA陣列)

這是一道模板題。讀入乙個長度為 n 的由大小寫英文本母或數字組成的字串,請把這個字串的所有非空字尾按字典序從小到大排序,然後按順序輸出字尾的第乙個字元在原串中的位置。位置編號為 1 到 n 輸入格式 一行乙個長度為 n 的僅包含大小寫英文本母或數字的字串。輸出格式 一行,共 n 個整數,表示答案。輸...

P3809 模板 字尾排序 (字尾陣列sa )

題意 讀入乙個長度為 n的由大小寫英文本母或數字組成的字串,請把這個字串的所有非空字尾按字典序從小到大排序,然後按順序輸出字尾的第乙個字元在原串中的位置。位置編號為 1到 n。資料範圍 n 1e6 解法 題目要求的是排名第x的字尾在原串中的位置,其實就是字尾陣列中的sa陣列,算出來直接輸出就行了 c...