hdu 2222 Keywords Search
2015-08-03 18:56
411 查看
hdu 2222 Keywords Search
题意:
给出n个单词,然后给你一篇文章,问给出的单词在文章中出现的次数。
限制:
0 <= n <= 1e4; 单词只包含小写字母; 长度小于50;
文章长度 <= 1e6
思路:
ac自动机模板题
题意:
给出n个单词,然后给你一篇文章,问给出的单词在文章中出现的次数。
限制:
0 <= n <= 1e4; 单词只包含小写字母; 长度小于50;
文章长度 <= 1e6
思路:
ac自动机模板题
/*hdu 2222 Keywords Search 题意: 给出n个单词,然后给你一篇文章,问给出的单词在文章中出现的次数。 限制: 0 <= n <= 1e4; 单词只包含小写字母; 长度小于50; 文章长度 <= 1e6 思路: ac自动机模板题 */ #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=500001; int n; int que ; char str[2*N]; struct acm{ int cnt; int next [26],sum ,fail ; bool vis ; void clear(){ for(int i=1;i<=cnt;++i){ vis[i]=sum[i]=fail[i]=0; for(int j=0;j<26;++j) next[i][j]=0; } cnt=1; for(int i=0;i<26;++i) next[0][i]=1; } void insert(char str[]){ int now=1; int len=strlen(str); for(int i=0;i<len;++i){ if(!next[now][str[i]-'a']) next[now][str[i]-'a']=++cnt; now=next[now][str[i]-'a']; } ++sum[now]; } void buildFail(){ int head=0,tail=1; que[0]=1; fail[1]=0; while(head!=tail){ int now=que[head];head++; for(int i=0;i<26;++i){ int ch=next[now][i]; if(!ch) continue; int tmp=fail[now]; while(!next[tmp][i]) tmp=fail[tmp]; fail[ch]=next[tmp][i]; que[tail++]=ch; } } } void gao(char str[]){ int ans=0,now=1,len=strlen(str); for(int i=0;i<len;++i){ vis[now]=1; while(!next[now][str[i]-'a']) now=fail[now]; now=next[now][str[i]-'a']; if(!vis[now]) for(int j=now;j;j=fail[j]){ ans+=sum[j]; sum[j]=0; } } printf("%d\n",ans); } void debug(){ for(int i=0;i<=cnt;++i){ printf("id=%3d,fail=%3d,sum=%3d,chi=[",i,fail[i],sum[i]); puts(""); for(int j=0;j<26;++j) printf("%2c",j+'a'); puts(""); for(int j=0;j<26;j++) printf("%2d",next[i][j]); puts(""); printf("]\n"); } } }acm; int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n); acm.clear(); for(int i=0;i<n;++i){ scanf("%s",str); acm.insert(str); } acm.buildFail(); //acm.debug(); scanf("%s",str); acm.gao(str); } return 0; }
相关文章推荐
- mysql 获取行号 rownum
- java 学习笔记--------改进后的登录界面
- 归并排序
- 2015 Multi-University Training Contest 4
- 消息队列系列(四):Rabbitmq常用命令行
- [转载] Java中动态加载jar文件和class文件
- IOS UIWenView 调整页面字体大小
- 高并发网络编程之epoll详解
- Xcode 7 App Transport Security has blocked a cleartext HTTP 报错解决办法
- MAC OS ANDROID环境搭建
- mybatis取得数据库自增长主键
- ElasticSearch简单使用
- iOS Crash文件的解析(一)
- 数据库—服务器的工作流程
- android中如何实现mvc,用MVC进行重构
- 该学习一下有关运维的知识了
- OSAL 如何添加用户任务 - 记3
- java中两个空字符串相加, 等于什么? (我说的空字符串是指null)
- winfrom中 Unable to copy file "obj\x86\Debug\TEST.exe" 问题
- DevKit安装失败,Invalid configuration or no Rubies listed. Please fix 'config.yml' and rerun 'ruby dk.rb