Duan2baka的AC自动机模板!
来源:互联网 发布:ubuntu 镜像源 编辑:程序博客网 时间:2024/06/08 04:47
HDU[2222] Keywords Search
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222
AC自动机常用于多模字符串匹配问题
代码如下:
#include<cstring>#include<ctype.h>#include<cstdio>#include<queue>#define N 1000050using namespace std;inline int read(){ int x; scanf("%d",&x); return x;}int T,n;char c[N];struct Node{ Node *nex,*ch[26]; bool b; int num; Node():nex(NULL),b(false),num(0){ for(int i=0;i<26;i++) ch[i]=NULL; }}*root;struct Aho_Corasick_Automaton{ inline void Insert(char *c){ int len=strlen(c+1); Node *x=root; for(int i=1;i<=len;i++){ int k=c[i]-'a'; if(x->ch[k]==NULL) x->ch[k]=new Node; x=x->ch[k]; } x->num++; } inline void GetFail(){ queue<Node*>q; Node *x=root; for(int i=0;i<26;i++){ if(x->ch[i]!=NULL) q.push(x->ch[i]),x->ch[i]->nex=x; else x->ch[i]=x; } while(!q.empty()){ x=q.front();q.pop(); for(int i=0;i<26;i++){ if(x->ch[i]!=NULL) q.push(x->ch[i]),x->ch[i]->nex=x->nex->ch[i]; else x->ch[i]=x->nex->ch[i]; } Node *tmp=x; tmp=tmp->nex; while(tmp!=root && !tmp->num) tmp=tmp->nex; x->nex=tmp; } return; } inline int Match(char *c){ int len=strlen(c+1); int ans=0; Node *x=root; for(int i=1;i<=len;i++){ int k=c[i]-'a'; x=x->ch[k]; Node *tmp=x; while(tmp!=root && !tmp->b){ ans+=tmp->num,tmp->b=true; tmp=tmp->nex; } } return ans; }}AC;int main(){ T=read(); while(T--){ root=new Node; n=read(); for(int i=1;i<=n;i++){ scanf("%s",c+1); AC.Insert(c); } AC.GetFail(); scanf("%s",c+1); printf("%d\n",AC.Match(c)); }return 0;}
阅读全文
0 0
- Duan2baka的AC自动机模板!
- Duan2baka的高精度模板!
- Duan2baka的Treap模板!
- Duan2baka的Splay模板!
- Duan2baka的KMP模板!
- Duan2baka的手写堆模板!
- Duan2baka的线段树模板!
- Duan2baka的各种LCA模板!
- 我的ac自动机模板
- AC自动机的两个模板
- 【AC自动机】AC自动机模板
- 白书上的AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- AC自动机模板
- JAVA学习笔记19——MyBatis框架第二章
- 深入理解display属性
- 运维生涯(三)
- Dubbo常用标签
- 路由——route(2)
- Duan2baka的AC自动机模板!
- react踩坑不完全指北(2)
- 1.CountDownLatch简介
- 104. Maximum Depth of Binary Tree
- 二.PullToRefresh 主方法里面
- caffe画 feature map
- 深吸一口奶茶,领取个京东云免费VPS
- 团队项目负责人的一些感悟
- 17.12.13,web学习第二十五天,还有一年,努力吧青年动态代理