luogu3796AC自動機模版

2021-08-16 20:17:55 字數 1289 閱讀 4194

有nn 個由小寫字母組成的模式串以及乙個文字串tt 。每個模式串可能會在文字串中出現多次。你需要找出哪些模式串在文字串tt 中出現的次數最多。

2

aba

bab

ababababac

6 beta

alpha

haha

delta

dede

tata

dedeltalphahahahototatalpha

0

4

aba

2 alpha

haha

ac自動機

一些調**的經驗:

陣列大小要開夠,memset的時候(尤其是ac自動機)要小心被卡成tle

因為trie陣列有很多沒用到的地方,多組資料清空要注意

每次init()只清空陣列,不清cnt,本地除錯根本調不出來

#include

#include

#include

#include

using

namespace

std;

#define maxn 105010

int trie[maxn][30];

int val[maxn],fail[maxn];

int cnt[maxn];

char ss[1000010];

char str[200][200];

int cnnt=0;

void ins(char *s,int n,int x)

val[now]=x;

}void get_fail()

while(!q.empty())

else trie[x][i]=trie[fail[x]][i];}}

}void query(char *s,int n,int m)

}int maxx=0;

for(int i=1;i<=m;++i)

printf("%d\n",maxx);

for(int i=1;i<=m;++i)

}void init()

cnnt=0;

}int main()

get_fail();

scanf("%s",ss+1);

int len=strlen(ss+1);

query(ss,len,n);

}return

0;}

AC自動機模板 洛谷3796

ac自動機的第三個模板 其實,個人覺得,目前我寫的這三個不同的模板完全是可以合併在一起求解的。只是,在這兩個無關聯的oj上,同乙個ac自動機都可以完成的問題被拆成了三道題而已。因此,只需要略加修改即可解決這道題。具體題目請上洛谷檢視 include include include include i...

P3796 模板 AC自動機

傳送門 ac自動機的模板 簡單的理解就是字典樹上的kmp 注意陣列不要開太大 不然每次memset耗時太多 有乙個小優化 每次走 fail 邊找匹配時只有一些會更新答案 那麼就可以把沒用的fail邊壓縮掉 設 g x 表示從 x 點一直走 fail 邊,走到的第乙個有結束標記的點 那麼找匹配時就只有...

AC自動機模板3 洛谷3796

ac自動機的第三個模板 其實,個人覺得,目前我寫的這三個不同的模板完全是可以合併在一起求解的。只是,在這兩個無關聯的oj上,同乙個ac自動機都可以完成的問題被拆成了三道題而已。因此,只需要略加修改即可解決這道題。具體題目請上洛谷檢視 include include include include i...