P3808 模板 AC自動機(簡單版)

2021-09-11 11:20:26 字數 997 閱讀 9572

這是一道簡單的ac自動機模板題。

用於檢測正確性以及演算法常數。

為了防止卡oj,在保證正確的基礎上只有兩組資料,請不要惡意提交。

給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。

輸入格式:

第一行乙個n,表示模式串個數;

下面n行每行乙個模式串;

下面一行乙個文字串。

輸出格式:

乙個數表示答案

輸入樣例#1:複製

2aaa

aa

輸出樣例#1:複製

2
subtask1[50pts]:∑length(模式串)<=10^6,length(文字串)<=10^6,n=1;

subtask2[50pts]:∑length(模式串)<=10^6,length(文字串)<=10^6;

這個模板的原理是用字典樹記錄每個節點存在的單詞數

通過kmp的指標一樣的原理,跟模式串的每個單詞進行匹配

最後加和得到ans

#include #include #include #include #include #define maxn 1000000+5

using namespace std;

struct treeac[maxn];

int cnt=0;

void build(string s)

}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;

cout

return 0;

}

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...

P3808 模板 AC自動機(簡單版)

給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。乙個數表示答案 2aaa aa2subtask1 50pts length 模式串 106,length 文字串 106,n 1 subtask2 50pts le...