給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。
subtask1[50pts]:∑length(模式串)<=106
10^6
106,length(文字串)<=106
10^6
106,n=1;
subtask2[50pts]:∑length(模式串)<=106
10^6
106,length(文字串)<=106
10^6
106;
#include
#include
#include
#include
using
namespace std;
//用∑length(模式串)作為maxn
const
int maxn=
1000005
;int n;
char s[maxn]
;char ss[maxn]
;class
ac_automatic
//首先建立trie樹
inline
void
insert
(char
*s)//作為模式串結尾的標記,同時記錄模式串出現次數
val[u]++;
}void
build()
}//bfs找出所有節點的fail指標
while
(!qu.
empty()
)else
//如果這個點不存在,就直接跳到前乙個點的fail指標的下乙個點上
ch[u]
[i]=ch[fail[u]
][i];}
}}intask
(char
*s)}
return ans;
}private
:int size;
int ch[maxn][26
];int val[maxn]
;int fail[maxn]
; queue<
int> qu;
}ac;
intmain()
ac.build()
;scanf
("%s"
,ss)
;printf
("%d\n"
,ac.
ask(ss));
return0;
}
AC自動機入門,洛谷P3808
給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。輸入輸出格式 輸入格式 第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。輸出格式 乙個數表示答案 輸入輸出樣例 輸入樣例 1 2aaa aa輸出樣例 1 兩個會出現在模板題面裡的詞語 文字串和模式串 給你幾個單詞...
洛谷P3808 模板 AC自動機(簡單版)
這是一道簡單的ac自動機模板題。用於檢測正確性以及演算法常數。為了防止卡oj,在保證正確的基礎上只有兩組資料,請不要惡意提交。給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。輸入格式 第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。輸出格式 乙個數表示答案 輸...
洛谷P3808 模板 AC自動機(簡單版)
給定n個模式串和1個文字串,求有多少個模式串在文字串裡出現過。輸入格式 第一行乙個n,表示模式串個數 下面n行每行乙個模式串 下面一行乙個文字串。輸出格式 乙個數表示答案 include using namespace std int const n 1000005 int const m 1000...