題意:給出模式串,再給出文字串,求出每個模式串的出現次數
思路:經典的跑ac自動機的題,但是有個坑:會有相同的字元
這道題得建fail樹跑dfs,不然會超時
1 #include2view codeusing
namespace
std;
3const
int maxn=1e6+10;4
struct
actrie[150*80];8
intn,cnt;
9char
s[maxn];
10 queueq;
11string zifu[200
];12
int sto[maxn]; int num=0;13
int mx=0;14
intvis[maxn];
15void
init()
1624
void insert(int
x)25
33 vis[u]=++num;
34 trie[u].flag++;35}
36void
getfail()
37 //
不存在該節點,第二種情況
50 trie[v].fail=trie[fail].son[i]; //
第三種情況,直接指就可以了
51 q.push(v); //
存在實節點才壓入佇列52}
53}54}
55int query(char*s)
5667 u=trie[u].son[v]; //
到下乙個兒子68}
69return
ans;70}
71int
main()
80getfail();
81 scanf("%s"
,s);
82query(s);
83 printf("
%d\n
",mx);
84for(int i=1;i<=n;i++)88}
89return0;
90 }
P5357 模板 AC自動機(二次加強版)
題目大意 給n個模式串和乙個主串,分別輸出每個模式串在主串 現過幾次 題目思路 ac自動機模板題,ac自動機就是先建乙個字典樹,然後建fail指標,建fail的時候如果是模式串中給的字元,就建fail,否則就繼承之前的fail情況,這是為了以後不用跳fail能直接得到想要的值。接著就是最精華的地方,...
洛谷 5357 模板 AC自動機(二次加強版)
題目描述 給你乙個文字串 s 和 n 個模式串 t 1.n t t1 n 請你分別求出每個模式串 t it i ti 在 s 現的次數。輸入格式 第一行包含乙個正整數 n 表示模式串的個數。接下來 n 行,第 i 行包含乙個由小寫英文本母構成的字串 t it i ti 最後一行包含乙個由小寫英文本母...
洛谷P5357 AC自動機 二次加強版
題目大意 給你n個模式串t it i ti 乙個匹配串s.問你每個模式串出現過多少次.n 2 e5,ti 2e5 s 1e6 n leq 2e5 sum t i leq 2e5 s leq 1e6 n 2e5,ti 2 e5,s 1 e6題目思路 模板 優化。其實我們可以發現ac自動機在查詢的時候,...