洛谷 3796 模板 AC自動機(加強版)

2021-09-26 03:34:46 字數 1229 閱讀 3561

題目描述

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

輸入格式

輸入含多組資料。

每組資料的第一行為乙個正整數n,表示共有n個模式串,1≤n

≤150

1≤n≤150

1≤n≤15

0。接下去n行,每行乙個長度小於等於70的模式串。下一行是乙個長度小於等於106

10^6

106的文字串t。

輸入結束標誌為n=0。

輸出格式

對於每組資料,第一行輸出模式串最多出現的次數,接下去若干行每行輸出乙個出現次數最多的模式串,按輸入順序排列。

輸入輸出樣例

輸入 #1

2aba

babababababac

6beta

alpha

haha

delta

dede

tata

dedeltalphahahahototatalpha

0

輸出 #1

4aba

2alpha

haha

#include#include#include#include#include#include#includeusing namespace std;

struct treeac[100000];//trie樹

int cnt=0;//trie的指標

struct resultans[100000];//所有單詞的出現次數

bool operator <(result a,result b)

}while(!q.empty())else//不存在這個子節點

ac[u].vis[i]=ac[ac[u].fail].vis[i];}}

}int ac_query(string s)

ac[0].fail=0;//結束標誌

get_fail();//求出失配指標

cin>>s[0];//文字串

ac_query(s[0]);

sort(&ans[1],&ans[n+1]);

cout

}return 0;

}

AC自動機模板 洛谷3796

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

AC自動機模板3 洛谷3796

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

洛谷P3796 模板 AC自動機(加強版)

題目描述 有個由小寫字母組成的模式串以及乙個文字串。每個模式串可能會在文字串中出現多次。你需要找出哪些模式串在文字串中出現的次數最多。輸入輸出格式 輸入格式 輸入含多組資料。每組資料的第一行為乙個正整數,表示共有個模式串,接下去行,每行乙個長度小於等於的模式串。下一行是乙個長度小於等於的文字串。輸入...