這是一道簡單的ac自動機模板題。
用於檢測正確性以及演算法常數。
為了防止卡oj,在保證正確的基礎上只有兩組資料,請不要惡意提交。
給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。
輸入格式:
第一行乙個n,表示模式串個數;
下面n行每行乙個模式串;
下面一行乙個文字串。
輸出格式:
乙個數表示答案
輸入樣例#1:複製
2aaa輸出樣例#1:複製aa
2subtask1[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/while(1)getchar();
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...