模板 字尾自動機

2022-05-07 21:48:09 字數 2527 閱讀 9668

求子串的出現次數。用類似拓撲排序的思想,從沒有出度的節點開始把他的cnt加在他的字尾連線上。

#include using namespace std;

typedef long long ll;

struct node

void copynewnode(const int &l, const node& n)

};const int maxn = 1000000;

struct edge edge[(maxn << 1) + 5];

int etop;

//suffixautomaton

struct sam

void extend(char ch) }}

void dfs(int id)

}ll solve()

dfs(1);

ll res = 0;

for(int i = top; i >= 2; --i)

if(nd[i].cnt > 1)

return res;

}} sam;

char s[maxn + 5];

int main()

這個link樹不如回文機優美,但是可以用拓撲排序來非遞迴求。

#include using namespace std;

typedef long long ll;

struct node

void copynewnode(const int &l, const node& n)

};const int maxn = 1000000;

//suffixautomaton

struct sam

void extend(char ch) }}

int d[(maxn << 1) + 5];

int que[(maxn << 1) + 5], front, back;

ll solve()

ll res = 0;

for(int i = top; i >= 2; --i)

if(nd[i].cnt > 1)

return res;

}} sam;

char s[maxn + 5];

int main()

兩個字串st的最長公共子串,對s構造sam。然後逐個比較t的字首。其實是逐個加入t的字元c,每次都嘗試往後走到c,成功則len+1,否則退後到他的字尾連線上,同時更新len,直到沒有辦法繼續字尾連線則這個字元徹底失配。比dp解法快多了。

記得要偏移』a'就都偏移'a',別演戲。

#include using namespace std;

typedef long long ll;

struct node

void copynewnode(const int &l, const node& n)

};const int maxn = 250000;

//suffixautomaton

struct sam

void extend(char ch) }}

int longestcommonsubstring(char *t)

if(nd[u].ch[c]) }}

/*for(int i = endpos - ans + 1; i <= endpos; ++i)

putchar(t[i]);

putchar('\n');*/

return ans;

}} sam;

char s[maxn + 5], t[maxn + 5];

int main()

多個字串的lcs。又wa又t。

#include using namespace std;

typedef long long ll;

const int inf = 0x3f3f3f3f;

struct node

void copynewnode(const int &l, const node& n)

};const int maxlen = 100000;

const int maxnode = 2 * maxlen + 5;

//suffixautomaton

struct sam

void extend(char ch) }}

int d[maxnode];

int que[maxnode], front, back;

void updatelink()

}void longestcommonsubstringhelp(char *t)

if(nd[u].ch[c])

}updatelink();

return;

}int longestcommonsubstring()

} sam;

char s[maxlen], t[maxlen];

int main()

字尾自動機模板

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 ...

模板 字尾陣列 字尾自動機

關於字尾自動機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 先貼乙個講得通俗易懂的字尾自動機學習 蒟蒻的我居然仍然沒看懂 講得也夠詳細。學習 苦逼的我 乙個下午就死記硬背了這...