hdu 2222(初级AC自动机)
来源:互联网 发布:virtualbox5 装mac dmg 编辑:程序博客网 时间:2024/06/02 05:12
点击打开链接
模版级别的AC自动机!!!!
#include"stdio.h"#include"string.h"#define N 500004const int kind=26;struct node{node *fail;node *next[kind];int count;node(){fail=NULL;count=0;memset(next,NULL,sizeof(next));}}*q[N];char keyword[51];char str[N*2];int head,tail;void insert(char *str,node *root){node *p=root;int i=0,index;while(str[i]){index=str[i]-'a';if(p->next[index]==NULL)p->next[index]=new node();p=p->next[index];i++;}p->count++;}void build_ac_automation(node *root){int i;root->fail=NULL;q[head++]=root;while(head!=tail){node *temp=q[tail++];node *p=NULL;for(i=0;i<26;i++){if(temp->next[i]!=NULL){if(temp==root)temp->next[i]->fail=root;else{p=temp->fail;while(p!=NULL){if(p->next[i]!=NULL){temp->next[i]->fail=p->next[i];break;}p=p->fail;}if(p==NULL)temp->next[i]->fail=root;}q[head++]=temp->next[i];}}}}int query(node *root){int i=0,cnt=0,index,len=strlen(str);node *p=root;while(str[i]){index=str[i]-'a';while(p->next[index]==NULL&&p!=root)p=p->fail;p=p->next[index];p=(p==NULL)?root:p;node *temp=p;while(temp!=root&&temp->count!=-1){cnt+=temp->count;temp->count=-1;temp=temp->fail;}i++;}return cnt;}int main(){int n,t;scanf("%d",&t);while(t--){head=tail=0;node *root=new node();scanf("%d",&n);getchar();while(n--){gets(keyword);insert(keyword,root);}build_ac_automation(root);scanf("%s",str);printf("%d\n",query(root));}return 0;}
- hdu 2222(初级AC自动机)
- HDU 2222 (AC自动机)
- Hdu 2222(AC 自动机)
- HDU 2222 (AC自动机)
- AC自动机 hdu 2222
- HDU 2222(AC 自动机)
- hdu 2222 AC自动机
- HDU 2222 AC自动机
- Hdu 2222 [AC自动机]
- hdu 2222 AC自动机 。。
- hdu 2222 AC自动机
- hdu 2222 ac自动机
- hdu 2222 AC自动机
- HDU 2222 AC自动机
- HDU 2222 AC自动机
- hdu 2222 ac自动机
- hdu 2222 AC自动机
- ac自动机 hdu 2222
- 关于JAVA项目经验的问题
- 北京的公交线路编号含义
- Linux Coding Style
- WebForm运行的部分原理
- 通过例子分析Cocos2d-x的Resolution
- hdu 2222(初级AC自动机)
- Android过滤具体应用日志的脚本
- NS2 速率控制
- 40. 面向对象的LotusScript(十二)之SheetWriter
- Content Providers——Basics
- NS2实验练习
- 动态链接库(DLL)的开发和使用
- hdu stars 简单的树状数组
- errro