关键词匹配(Ac自动机模板题)
2772: 关键词匹配
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 10 Solved: 4
[Submit][Status][Web Board]
Description
Input
接下来N行,每行输入一个长度不超过50且全由小写字母组成的单词。
最后一行输入一个长度不超过1000000的字符串。
N≤10000
Output
Sample Input
5 she he say shr her yasherhs
Sample Output
3
HINT
Source
题解:
裸Ac自动机,不会的可以去看看这个博客:http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html;
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define maxn 1000005 5 #define maxm 1000005 6 using namespace std; 7 int n,tot,head,tail,son[maxm][26],fai[maxm],sum[maxm],list[maxm]; 8 char s[maxn]; 9 void clear(){ 10 tot=0; 11 memset(son,0,sizeof(son)); 12 memset(sum,0,sizeof(sum)); 13 } 14 void insert(char *s){ 15 int p=0; 16 for (int i=1;s[i];p=son[p][s[i]-'a'],i++) if (!son[p][s[i]-'a']) son[p][s[i]-'a']=++tot; 17 sum[p]++; 18 } 19 void failed(){ 20 head=0,tail=1,list[1]=0,fai[0]=-1; 21 while (head!=tail){ 22 int x=list[++head]; 23 for (int ch=0;ch<26;ch++) 24 if (son[x][ch]){ 25 list[++tail]=son[x][ch]; 26 int p=fai[x]; 27 while (p!=-1&&!son[p][ch]) p=fai[p]; 28 if (p==-1) fai[son[x][ch]]=0; 29 else fai[son[x][ch]]=son[p][ch]; 30 } 31 } 32 } 33 void work(char *s){ 34 int ans=0; 35 for (int i=1,p=0;s[i];i++){ 36 while (p&&!son[p][s[i]-'a']) p=fai[p]; 37 p=son[p][s[i]-'a']; 38 for (int t=p;t;t=fai[t]) ans+=sum[t],sum[t]=0; 39 } 40 printf("%d\n",ans); 41 } 42 int main() 43 { 44 cin>>n;//,clear(); 45 for (int i=1;i<=n;i++) scanf("%s",s+1),insert(s); 46 failed(); 47 scanf("%s",s+1),work(s); 48 return 0; 49 }
View Code
转载于:https://www.cnblogs.com/HQHQ/p/5367953.html
关键词匹配(Ac自动机模板题)相关推荐
- 数单词 (AC自动机模板题)
数单词 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 为了能够顺利通过英语四六级考试,现在大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中可以通过六级, ...
- NYOJ 1085 数单词 (AC自动机模板题)
数单词 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 为了能够顺利通过英语四六级考试,现在大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中可以通过六级, ...
- [Bzoj3940] [AC自动机,USACO 2015 February Gold] Censor [AC自动机模板题]
AC自动机模板题(膜jcvb代码) 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> ...
- HDU 2222 Keywords Search (AC自动机模板题)
一组数据: 1 3 sss sss sss sss ans:3 #include <cstdio> #include <cstdlib> #include <vector ...
- HDU 2896 病毒侵袭(AC自动机/模板题)
传送门 病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)
链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...
- Keywords Search HDU - 2222(AC自动机模板)
题意: 给定 n个长度不超过 50的由小写英文字母组成的单词准备查询,以及一篇文章,问:文中出现了多少个待查询的单词.多组数据. 题目: In the modern time, Search engi ...
- AC自动机模板(【洛谷3808】)
题面 题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串 ...
- HDU2896(AC自动机模版题)
AC自动机模版题: 方法一:超时 #include<iostream> #include<algorithm> #include<cstring> #include ...
最新文章
- php 伪静态 page-18.html,PHP 伪静态实现技术原理讲解
- php返回结果判断,老司机在判断返回结果时翻了个身(ThinkPHP)
- 64位Fedora运行32位C++程序中int精度溢出处理
- python中的 2%s何意_python中的%s%是什么意思
- 类型重定义 头文件预编译设置
- java匿名内部类举例和内部类举例
- Python正则表达式的7个使用典范
- 282天,汇付天下“冲上云霄”
- SQL Server 行列转换(1)
- grpc php 返回值过大,使用grpc实现php、java、go三方互调
- MySQL 读写分离 部分_一个完整的mysql读写分离环境包括以下几个部分
- 彻底理解Cisco NAT内部的一些事
- Python爬取中国银行外汇牌价(爬虫 + PyFlux简单预测分析)--(一)
- iOS 初学者功能代码大集合,个人笔记
- 神经网络(四)-vanishing gradient problem
- C. NEKO's Maze Game
- 根轨迹分析 matlab,MATLAB的根轨迹分析
- java中多态的作用,多态的好处,以及为什么要用多态?
- 为什么把人称呼为“总”?
- 基于JavaEE的“三味”书屋网上售书系统
热门文章
- CPU 乱序执行验证
- 包含多个段的程序---汇编学习笔记
- RPC和Restful深入理解
- Hi3516A开发--挂载SD卡和U盘
- java 线程状态 jstack_jstack查看jvm线程状态
- Java类库及其组织结构(Java API)
- JZOJ 2308. 【中山市选2011】聚会
- layui 自定义排序_thinkphp5+layui异步修改排序
- 服务器版的mysql怎么装_WIN7服务器配置之MySQL数据库安装图解(适用于5.1,5.5的版本)...
- c 文件夹打包解包_linux中文档的压缩与打包