hdu 2222 Keywords Search
来源:互联网 发布:医疗软件销售 编辑:程序博客网 时间:2024/04/28 10:14
AC自动机模板题,刚学习这个东西,有的地方还不是很明白。
代码:
#include <queue>#include <cstdio> #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int SIZE = 26;const int MAX = 10000*50 + 10;struct Trie{int next[MAX][SIZE],end[MAX],fail[MAX];int root,L;int newnode(){//create a new nodefor(int i=0; i<26; i++)next[L][i] = -1;end[L++] = 0;return L - 1;}void init(){//initialise the trie treeL = 0;root = newnode();}void insert(char buf[]){//insert a string into the trie treeint now = root, len = strlen(buf);for(int i=0; i<len; i++){if(next[now][buf[i]-'a'] == -1)next[now][buf[i]-'a'] = newnode();now = next[now][buf[i]-'a'];}end[now]++;}void build(){//build the Aho-Corasickqueue <int> Q;for(int i=0; i<26; i++){if(next[root][i] == -1) next[root][i] = root;else{fail[next[root][i]] = root;Q.push(next[root][i]);}}while(!Q.empty()){int now = Q.front();Q.pop();for(int i=0; i<26; i++){if(next[now][i] == -1) next[now][i] = next[fail[now]][i];else{fail[next[now][i]] = next[fail[now]][i];Q.push(next[now][i]);}}}}int query(char buf[]){int len = strlen(buf), now = root;int res = 0;for(int i=0; i<len; i++){now = next[now][buf[i]-'a'];int temp = now;while(temp != root){res += end[temp];end[temp] = 0;temp = fail[temp];}}return res;}};Trie AC;char buf[1000010];int main(){int cas, num;scanf("%d",&cas);while(cas--){AC.init();scanf("%d",&num);for(int i=0; i<num; i++){scanf("%s",buf);AC.insert(buf);}AC.build();scanf("%s",buf);printf("%d\n",AC.query(buf));}return 0;}
0 0
- hdu 2222 Keywords Search
- hdu 2222 Keywords Search
- HDU-2222 Keywords Search
- hdu 2222 Keywords Search
- Hdu 2222 Keywords Search
- hdu 2222-Keywords Search
- hdu 2222 Keywords Search
- HDU 2222 Keywords Search
- HDU 2222 Keywords Search
- Hdu 2222 Keywords Search
- HDU 2222 Keywords Search
- HDU 2222 Keywords Search
- HDU 2222 Keywords Search
- hdu 2222 Keywords Search
- HDU 2222 Keywords Search
- hdu 2222 Keywords Search
- HDU 2222 Keywords Search
- HDU - 2222 Keywords Search
- AD元件简写中英文对照表
- hadoop MR maven级代码模板
- 折半查找算法的使用
- android 图片异步加载的相关文章,教程,源码
- Oracle 创建表空间以及用户
- hdu 2222 Keywords Search
- NDK(Native Development Kit)文档:入口
- Microsoft Windows Azure 提供了哪些服务(续)
- C++ Primer(第4版)-第1部分:基本语言——学习笔记
- Linearlayout
- 第19周上机时间项目4——点和距离
- Little Elephant and Interval
- javascript-6函数
- hdu 4554 叛逆的小明