字尾自動機 序列自動機綜合

2022-02-02 08:42:40 字數 2481 閱讀 1377

好像序列自動機還沒有寫過…

串長為n的串共有n+1個節點,除了串中的n個節點,還有乙個空的根節點放在串首。每個節點至多有26條出邊,每條邊連向它之後的第乙個字元。

串中的任意乙個子串行對應了一條根到某個節點的路徑。且每條路徑對應乙個不同的子串行。

每個節點的parent是這個字母上一次出現的位置。更新只要沿parent指標掃瞄即可。

fjoi2016 所有公共子串行問題

這題暴力建trie能過80真是悲傷(因為按fjoi命題風格這題沒有寫資料範圍

建完序列自動機暴力dp即可

#include #include 

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define sz 3333

int ys[2333],fys[2333

];#define m 60

struct

seq_a_m

void ins(char

c) lst[c]=c;

}}s_a,s_b;

intn,m;

typedef

long

long

ll;ll dp[sz][sz];

char

x[sz],y[sz];

ll getdp(

int a,int

b)char s[233333

];void tryy(int a,int b,int

cl)}

intmain()

四校聯考 公共串問題

還是暴力dp。注意一些細節。

#include #include 

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

int mod=998244353

;#define sz 4008

#define s 26 //

字符集structam;

struct seqam: public

amvoid ins(char

c) lst[c]=c;

}void

getcnt()

}}seqa,seqb;

struct sufam: public

amvoid ins(charc)}

void

getcnt()

}}sufa,sufb;

void prtat(am&s)

}am *cur,*curb;

intdp2[sz][sz];

int dfs(int a,int

b)int getdp(am& a,am&b)

char

a[sz],b[sz];

void prt(int

a)int

main()

bzoj4032 最短不公共子串

#include #include 

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

int mod=998244353

;#define sz 4008

#define s 26 //

字符集structam;

struct seqam: public

amvoid ins(char

c) lst[c]=c;

}void

getcnt()

}}seqa,seqb;

struct sufam: public

amvoid ins(charc)}

void

getcnt()

}}sufa,sufb;

void prtat(am&s)

}int

dep[sz][sz];

int qa[sz*sz],qb[sz*sz];

int bfs(am& a,am&b)

}return -1;}

#define prt(x) printf("%d\n",x)

char

a[sz],b[sz];

intmain()

AC自動機及字尾自動機

ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...

字尾自動機

基礎知識 step i 表示的是字串i在原字串中的位置。pareint i 表示root到parent i 的子串是root到i的最長字尾。字尾自動機遍歷可以得到原字串的所有子串。特殊技巧 一 字尾自動機的不同子串數有兩種求法 1.ans step i step parent i 1 i cnt 2...

字尾自動機

常用於處理字串問題,可以高效解決許多字串問題。有點像將乙個字串的所有字尾都建在乙個ac自動機上,但不同的是字尾自動機的節點數最多為2 n,因為它只記錄需要記錄的點,一些沒有記錄東西的點可以視為與下面有價值的節點並在一起,這樣大大降低了時間複雜度和空間複雜度。對於每乙個節點記錄它的後面加上每個字元後字...