給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。
第一行乙個n,表示模式串個數;
下面n行每行乙個模式串;
下面一行乙個文字串。
乙個數表示答案
2aaa
aa
2
subtask1[50pts]:∑length(模式串)<=106,length(文字串)<=106,n=1;
subtask2[50pts]:∑length(模式串)<=106,length(文字串)<=106;
ac自動機板子
近期得知有乙個trie圖優化,要不然容易被卡雖然從來沒被卡過
而且優化後的及其好寫
正常來說,乙個節點的fail等於父親的fail鏈上最近的這個兒子
我們需要不斷跳fail,這樣很慢
優化:如果乙個節點沒有c兒子,就讓它連上fail鏈上最近的c兒子
這個可以遞推出來
這樣,乙個點的fail就是父親fail的這個兒子,就沒了,也不用暴力跳了
而且匹配的時候,可以發現,不會有空節點,一直跳就行了
#include#define ll long long
ll in()
struct ac
void *operator new (size_t)
}; node *root;
public:
ac()
void ins(char *s)
o->num++;
} void build()
else
}} }
int query(char *s)
return ans;
}}b;
const int maxn = 1e6 + 100;
char s[maxn];
int main()
P3808 模板 AC自動機(簡單版)
這是一道簡單的ac自動機模板題。用於檢測正確性以及演算法常數。為了防止卡oj,在保證正確的基礎上只有兩組資料,請不要惡意提交。給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。輸入格式 第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。輸出格式 乙個數表示答案 輸...
P3808 模板 AC自動機(簡單版)
學習1 小蒟蒻yyb的部落格 學習2 大佬的板子 ac自動機 求多個模式串在文字串 現的次數 trie樹 根節點為0 int cnt 0 編號 void clear int x void build string s now ac now vis s i a ac now end 標記單詞結尾 qu...
P3808 模板 AC自動機(簡單版)
題意 給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。思路 建完tire,fail之後,開始跑自動機,然後對於走過的點,給乙個標記,防止多次計算即可 為啥呢,因為求得是有多少模式串在文字串出現過,而不是出現次數 1 include2 using namespace std 3const...