字尾自動機轉字尾樹模板

2022-05-09 14:43:02 字數 681 閱讀 7388

終於找到教程了,現在來寫一發

題目:jzoj4072(bzoj3998)弦論 第一問

其實非常好寫,連空間都不需要多開一倍,只需要sa陣列rank陣列和height陣列就好了,

dfs一次可以求出

#include

#include

#include

#include

#define n 1000010

using

namespace

std;

char str[n]; long

long k,c[n];

int s[n][26],f[n],sz[n],l[n],mx[n];

int n,m,cnt=1,lst=1,tot=0,sa[n],r[n],h[n];

inline

int extend(char c,int pos)

}void dfs(int x)

int main()

if(m) for(int i=1;i<=n;++i) c[i]=c[i-1]+n-sa[i]+1;

else

for(int i=1;i<=n;++i) c[i]=c[i-1]+n-sa[i]+1-h[i];

if(k>c[n]) puts("-1"); else

}

模板 字尾陣列 字尾自動機

關於字尾自動機sam,貼乙個非常好的講解 字尾自動機學習小記 交洛谷模板可a 傳送門 洛谷 模板 字尾排序 include using namespace std const int n 1e6 5 char s n int sa n t1 n t2 n c n int n,m 555 void s...

字尾自動機模板

include include define maxc 28 using namespace std const int maxn 1e6 5 const int mod 1e9 7 typedef long long ll int len maxn 2 最長子串的長度 該節點字串數量 len x ...

模板 字尾自動機

求子串的出現次數。用類似拓撲排序的思想,從沒有出度的節點開始把他的cnt加在他的字尾連線上。include using namespace std typedef long long ll struct node void copynewnode const int l,const node n c...