題意:給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。
思路:建完tire,fail之後,開始跑自動機,然後對於走過的點,給乙個標記,防止多次計算即可
為啥呢,因為求得是有多少模式串在文字串出現過,而不是出現次數
1 #include2view codeusing
namespace
std;
3const
int maxn=1000001;4
struct
actrie[maxn];
8int
n,cnt;
9char
s[maxn];
10 queueq;
11void insert(char*s)
1220 trie[u].flag++;21}
22void
getfail()
23 //
不存在該節點,第二種情況
36 trie[v].fail=trie[fail].son[i]; //
第三種情況,直接指就可以了
37 q.push(v); //
存在實節點才壓入佇列38}
39}40}
41int query(char*s)
4252 u=trie[u].son[v]; //
到下乙個兒子53}
54return
ans;55}
56int
main()
62getfail();
63 scanf("%s"
,s);
64 printf("
%d\n
",query(s));
65return0;
66 }
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個文字串,求有多少個模式串在文字串裡出現過。第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。乙個數表示答案 2aaa aa2subtask1 50pts length 模式串 106,length 文字串 106,n 1 subtask2 50pts le...