#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]-len[link[x]])
link[maxn *2]
,//字尾鏈結(最短串前部減少乙個字元所到達的狀態)
cnt[maxn *2]
,//被字尾連線的數
nex[maxn *2]
[maxc]
,//狀態轉移(尾部加乙個字元的下乙個狀態)(圖)
idx,
//節點編號
last;
//最後節點
ll epos[maxn *2]
;// enpos數(該狀態子串出現數量)
char str[maxn]
;ll a[maxn]
;//長度為i的子串出現最大次數
void
iint()
//sam建圖
void
extend
(int c)
} last = x;
//更新最後處理的節點
}void
getnpos()
}void
getsubnum()
void
getsubmax()
intmain()
模板 字尾自動機
求子串的出現次數。用類似拓撲排序的思想,從沒有出度的節點開始把他的cnt加在他的字尾連線上。include using namespace std typedef long long ll struct node void copynewnode const int l,const node n c...
模板 字尾陣列 字尾自動機
關於字尾自動機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...
字尾自動機模板(初步)
看了幾天居然連字尾自動機的構造原理和性質都沒完全搞懂。更不用說應用了。在這裡膜一下先輩clj大神 的ppt 大神的世界就是不懂。另外還要膜一下國家集訓隊的幾篇 作者,表示還沒看懂orz 先貼乙個講得通俗易懂的字尾自動機學習 蒟蒻的我居然仍然沒看懂 講得也夠詳細。學習 苦逼的我 乙個下午就死記硬背了這...