給乙個主串s以及m個字串。問這m個字串在主串中出現多少次。
ac自動機模板
哈哈,表達一下激動之情,我終於寫完了!!!
ac自動機=trie樹+fail指標(形同kmp的next陣列)
是一種多模匹配演算法,就是同時與多個字串比對
主要包括三個步驟:建字典樹,處理fail指標,匹配
建字典樹是沒什麼好注意的
fail指標的作用是在匹配失敗時可以繼續匹配,不丟失匹配失敗前未計入答案的匹配記錄
而處理fail指標概括起來就是:沿著x父親的fail指標走,若指向的節點兒子中有與x相同的點,那麼x的fail指標指向與它相同的這個點,否則繼續沿著指向的節點的fail指標走,重複步驟,知道fail指標指向樹根,那麼x的fail指標指向樹根
具體做法用廣搜進行,先把根節點加入佇列,然後把它的兒子們也加入佇列,處理出兒子們的fail指標;繼續調出隊頭節點,把它的兒子們加入佇列,處理出兒子們的fail指標
匹配具體做法是:設上乙個匹配的是節點x,這一次串匹配到第i位,那麼若節點x的兒子中有字串中i所對應的字元,那麼這一步匹配到這個符合條件的兒子,否則一直沿著x的fail指標走,直到有與i相同的字元或到達根節點。每次匹配成功乙個節點都判斷當前點是否是m個字串的結尾之一,加上答案,還要把當前點的fail指標指向的點加入答案
#include
#include
using namespace std;
int t[60004][27],b[30004];
int fail[30004];
int cnt=1,s,m,ans;
char c[2000006];
intq[30004];
void insert()
}b[j]++;
}void ac_mach()}}
}}void ac_work()
}int main()
ac_mach();
scanf("%s",c);
ac_work();
printf("%d",ans);
return
0;}
單詞統計 AC自動機
1118.單詞統計 time limit 1000 ms memory limit 32768 kb total submission s 12 accepted submission s 1 description 給定乙個字串和若干個單詞,統計這些單詞在這個字串中出現的次數。input 第一行為...
BZOJ 3172 單詞 (AC自動機)
這道題是個裸的ac自動機,但是我還是調了很久qaq。首先如果我們直接用每個單詞來匹配的,時間不是很理想。這道題要用到ac自動機的衍生物 fail樹 我也是做這道題才知道有這個東西 fail樹有這麼乙個結論 乙個字串出現的次數等於以它為根節點的fail樹的子樹中所有節點的cnt的和。根據這個結論,我們...
bzoj3172 單詞 AC自動機
感覺以前寫過。bzoj上不去我也不知道 跑一遍ac自動機,每乙個節點儲存一下屬於多少字串,為它的權值。然後乙個節點表示的字串在整個字典中出現的次數相當於其在fail樹中的子樹的權值的和。ac自動機不要寫掛就好了。ac 如下 include include include define n 11000...