题意:给出一个字符串和若干个模板,求出在文本串中出现的模板个数。
思路:由于有可能有反复的模板,trie树权值记录每一个模板出现的次数就可以。
#include #include #include #include #include #include #include #include
f[u] : last[f[u]]; } } } void find_T(char* T) { int n = strlen(T); int j = 0; for(int i = 0; i < n; i++) { int c = idx(T[i]); j = ch[j][c]; if(val[j]) print(j); else if(last[j]) print(last[j]); } } char tmp[105]; char text[1000000+1000]; int main() { //freopen("input.txt", "r", stdin); int T; cin >> T; while(T--) { scanf("%d", &n); Trie trie; ans = 0; for(int i = 0; i < n; i++) { scanf("%s", tmp); trie.insert(tmp); } getFail(); scanf("%s", text); find_T(text); cout << ans << endl; } return 0; }