HDU-2222 Keywords Search AC自动机模板题
来源:互联网 发布:php本地环境搭建 编辑:程序博客网 时间:2024/06/18 11:46
给你N个单词,给你一篇文章,问给出的单词在文章中出现的次数。
AC自动机基础题。模板题。
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#include<iostream>using namespace std;#define N 500010int head,tail;char s[1000010],ss[100];struct node{node *fail;node *next[26];int num;node(){fail=NULL;num=0;for(int i=0;i<26;i++)next[i]=NULL;}}*q[N];node *root;void insert(char *s){int i,j;int m,l;node *p=root;l=strlen(s);for(i=0;i<l;i++){m=s[i]-'a';if(p->next[m]==NULL)p->next[m]=new node();p=p->next[m];}p->num++;}void build_ac(){int i,j;q[tail++]=root;while(head!=tail){node *p=q[head++];node *temp=NULL;for(i=0;i<26;i++){if(p->next[i]!=NULL){if(p==root)p->next[i]->fail=root;else{temp=p->fail;while(temp!=NULL){if(temp->next[i]!=NULL){p->next[i]->fail=temp->next[i];break;}temp=temp->fail;}if(temp==NULL)p->next[i]->fail=root;}q[tail++]=p->next[i];}}}}int query(){int i,id,l,sum;node *p=root;sum=0;l=strlen(s);for(i=0;i<l;i++){id=s[i]-'a';while(p->next[id]==NULL&&p!=root)p=p->fail;p=p->next[id];if(p==NULL)p=root;node *temp=p;while(temp!=root&&temp->num!=-1){sum+=temp->num;temp->num=-1;temp=temp->fail;}}return sum;}int main(void){int i,j,k,n,m;scanf("%d",&n);while(n--){head=tail=0;root=new node();scanf("%d",&m);getchar();for(i=0;i<m;i++){gets(ss);insert(ss);}build_ac();scanf("%s",s);printf("%d\n",query());}return 0;}
阅读全文
0 0
- hdu 2222 Keywords Search AC自动机 模板
- hdu 2222 Keywords Search AC自动机 模板
- hdu 2222 Keywords Search(AC自动机模板)
- HDU 2222 Keywords Search 【AC自动机模板】
- hdu 2222 Keywords Search ac自动机模板
- HDU 2222 Keywords Search(AC自动机 模板)
- HDU 2222 Keywords Search AC自动机模板
- HDU 2222 Keywords Search (AC自动机模板)
- HDU 2222 Keywords Search ac自动机模板
- HDU 2222 Keywords Search(AC自动机模板)
- HDU 2222 Keywords Search(AC自动机模板题)
- hdu 2222 Keywords Search(AC自动机模板题)
- HDU 2222 Keywords Search (AC自动机模板题)
- hdu 2222 Keywords Search(AC自动机模板题)
- HDU 2222 Keywords Search AC自动机模板题
- hdu 2222 Keywords Search(ac自动机模板题)
- hdu 2222 Keywords Search AC自动机模板题
- HDU 2222 Keywords Search(AC自动机模板题)
- 解析Spark Executor内幕,详解CoarseGrainedExecutorBackend
- C++自动生成身份证号代码
- 解析JSON
- html回顾及vue.js在html中使用(三)
- Java中的Set集合接口实现插入对象不重复的原理
- HDU-2222 Keywords Search AC自动机模板题
- 笨方法学Python 习题 42: 对象、类、以及从属关系
- Matlab路径问题导致无法加载lib解决方案
- Puzzle UVA
- Makefile变态规则。。。
- C# 访问并打开局域网文件夹
- 使用Java让android手机自动执行重复重启
- 大作业8(直方图绘制)
- notch filter 点阻滤波器