傳送門
這是乙個神奇的演算法,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...