2772: 关键词匹配

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 10  Solved: 4
[Submit][Status][Web Board]

Description

给你N个单词,然后给定一个字符串,问一共有多少单词在这个字符串中出现过(输入相同的字符串算不同的单词,同一个单词重复出现只计一次)。

Input

第一行一个整数N,表示给定单词的个数。
接下来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自动机模板题)相关推荐

  1. 数单词 (AC自动机模板题)

    数单词 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 为了能够顺利通过英语四六级考试,现在大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中可以通过六级, ...

  2. NYOJ 1085 数单词 (AC自动机模板题)

    数单词 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 为了能够顺利通过英语四六级考试,现在大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中可以通过六级, ...

  3. [Bzoj3940] [AC自动机,USACO 2015 February Gold] Censor [AC自动机模板题]

    AC自动机模板题(膜jcvb代码) 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> ...

  4. HDU 2222 Keywords Search (AC自动机模板题)

    一组数据: 1 3 sss sss sss sss ans:3 #include <cstdio> #include <cstdlib> #include <vector ...

  5. HDU 2896 病毒侵袭(AC自动机/模板题)

    传送门 病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)            Memory Limit: 131072/131072 K (Java/Other ...

  6. 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)

    链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...

  7. Keywords Search HDU - 2222(AC自动机模板)

    题意: 给定 n个长度不超过 50的由小写英文字母组成的单词准备查询,以及一篇文章,问:文中出现了多少个待查询的单词.多组数据. 题目: In the modern time, Search engi ...

  8. AC自动机模板(【洛谷3808】)

    题面 题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串 ...

  9. HDU2896(AC自动机模版题)

    AC自动机模版题: 方法一:超时 #include<iostream> #include<algorithm> #include<cstring> #include ...

最新文章

  1. php 伪静态 page-18.html,PHP 伪静态实现技术原理讲解
  2. php返回结果判断,老司机在判断返回结果时翻了个身(ThinkPHP)
  3. 64位Fedora运行32位C++程序中int精度溢出处理
  4. python中的 2%s何意_python中的%s%是什么意思
  5. 类型重定义 头文件预编译设置
  6. java匿名内部类举例和内部类举例
  7. Python正则表达式的7个使用典范
  8. 282天,汇付天下“冲上云霄”
  9. SQL Server 行列转换(1)
  10. grpc php 返回值过大,使用grpc实现php、java、go三方互调
  11. MySQL 读写分离 部分_一个完整的mysql读写分离环境包括以下几个部分
  12. 彻底理解Cisco NAT内部的一些事
  13. Python爬取中国银行外汇牌价(爬虫 + PyFlux简单预测分析)--(一)
  14. iOS 初学者功能代码大集合,个人笔记
  15. 神经网络(四)-vanishing gradient problem
  16. C. NEKO's Maze Game
  17. 根轨迹分析 matlab,MATLAB的根轨迹分析
  18. java中多态的作用,多态的好处,以及为什么要用多态?
  19. 为什么把人称呼为“总”?
  20. 基于JavaEE的“三味”书屋网上售书系统

热门文章

  1. CPU 乱序执行验证
  2. 包含多个段的程序---汇编学习笔记
  3. RPC和Restful深入理解
  4. Hi3516A开发--挂载SD卡和U盘
  5. java 线程状态 jstack_jstack查看jvm线程状态
  6. Java类库及其组织结构(Java API)
  7. JZOJ 2308. 【中山市选2011】聚会
  8. layui 自定义排序_thinkphp5+layui异步修改排序
  9. 服务器版的mysql怎么装_WIN7服务器配置之MySQL数据库安装图解(适用于5.1,5.5的版本)...
  10. c 文件夹打包解包_linux中文档的压缩与打包