Problem Description
In the modern time, Search engine came into the life of everybody like Google, Baidu, etc.
Wiskey also wants to bring this feature to his image retrieval system.
Every image have a long description, when users type some keywords to find the image, the system will match the keywords with description of image and show the image which the most keywords be matched.
To simplify the problem, giving you a description of image, and some keywords, you should tell me how many keywords will be match.

Input
First line will contain one integer means how many cases will follow by.
Each case will contain two integers N means the number of keywords and N keywords follow. (N <= 10000)
Each keyword will only contains characters 'a'-'z', and the length will be not longer than 50.
The last line is the description, and the length will be not longer than 1000000.

Output
Print how many keywords are contained in the description.

Sample Input
1
5
she
he
say
shr
her
yasherhs

Sample Output
3

首先要说一下这个题号,2222,hhh。

其次这是一道AC自动机的裸题,但不知为何我第一次打AC自动机打成了爱吃自动机。。。其实这个名字也挺好

黄学长的代码写的很优美,这里就不再多说些什么了。

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char ch[],s[];
int T,n,sz,ans;
int a[][],q[],point[],danger[];
bool mark[]; void insert(){
int len=strlen(ch),now=;
for (int i=;i<len;i++){
int t=ch[i]-'a'+;
if (a[now][t])now=a[now][t];
else now=a[now][t]=++sz;
}
danger[now]++;//判断单词是否出现
} void acmach(){//构建AC自动机
int h=,t=;
q[]=;point[]=;
while (h<t){
int now=q[h++];
for (int i=;i<=;i++){
if (!a[now][i]) continue;
int k=point[now];
while(!a[k][i])k=point[k];
point[a[now][i]]=a[k][i];//这里是失败指针,类似KMP
q[t++]=a[now][i];
}
}
} void solve(){
int len=strlen(s),k=;
for (int i=;i<len;i++){
mark[k]=;
int t=s[i]-'a'+;
while (!a[k][t])k=point[k];
k=a[k][t];
if (!mark[k])
for (int j=k;j;j=point[j]){
ans+=danger[j];
danger[j]=;//因为有多组数据
}
}
printf("%d\n",ans);
} int main(){
scanf("%d",&T);
while (T--){
sz=;ans=;
scanf("%d",&n);
for (int i=;i<=;i++)a[][i]=;
for (int i=;i<=n;i++){
scanf("%s",ch);
insert();
}
acmach();
scanf("%s",s);
solve();
for(int i=;i<=sz;i++){
point[i]=danger[i]=mark[i]=;
for(int j=;j<=;j++)a[i][j]=;
}
}
}

【HDU2222】Keywords Search的更多相关文章

  1. 【HDU2222】Keywords Search AC自动机

    [HDU2222]Keywords Search Problem Description In the modern time, Search engine came into the life of ...

  2. 【HDU2222】Keywords Search(AC自动机)

    Problem Description In the modern time, Search engine came into the life of everybody like Google, B ...

  3. 【CF528D】Fuzzy Search(FFT)

    [CF528D]Fuzzy Search(FFT) 题面 给定两个只含有\(A,T,G,C\)的\(DNA\)序列 定义一个字符\(c\)可以被匹配为:它对齐的字符,在距离\(K\)以内,存在一个字符 ...

  4. 【计算机视觉】Selective Search for Object Recognition论文阅读3

    Selective Search for Object Recoginition surgewong@gmail.com http://blog.csdn.net/surgewong       在前 ...

  5. 【hdu 2222】Keywords Search

    [题目链接] 点击打开链接 [算法] 此题是AC自动机模板题 AC自动机是很神奇的算法,简单点来说,就是在一棵字典树上进行KMP,它的应用范围很广,非常实用 这篇博客写得很好,推荐阅读 : http: ...

  6. 【AC自动机】Keywords Search

    [题目链接] https://loj.ac/problem/10057 [题意] 原题来自:HDU 2222 给定  n 个长度不超过 50 的由小写英文字母组成的单词准备查询,以及一篇长为 m 的文 ...

  7. 【LeetCode】74. Search a 2D Matrix

    Difficulty:medium  More:[目录]LeetCode Java实现 Description Write an efficient algorithm that searches f ...

  8. C++之路进阶——hdu2222(Keywords Search)

    /*Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...

  9. 【HDU 2222】Keywords Search AC自动机模板题

    参考iwtwiioi的模板写出来的.上午gty讲的并没有听懂,只好自己慢慢对着模板理解. 在HDU上为什么相同的程序提交有时T有时A!!! 奉上sth神犇的模板(不是这道题): var ch:char ...

随机推荐

  1. [改善Java代码]警惕泛型是不能协变和逆变的

    什么叫做协变(covariance)和逆变(contravariance)? 在变成语言的类型框架中,协变和逆变是指宽类型和窄类型在某种情况下(如参数,泛型,返回值)替换或交换的特性,简单的说,协变是 ...

  2. 【记忆化搜索】Codeforces Round #295 (Div. 2) B - Two Buttons

    题意:给你一个数字n,有两种操作:减1或乘2,问最多经过几次操作能变成m: 随后发篇随笔普及下memset函数的初始化问题.自己也是涨了好多姿势. 代码 #include<iostream> ...

  3. 把数据库中的字符串格式转为long类型

    背景: 在做接口时,需要把数据库中所有ID取出来,用jmter做一些数据关联,问题来了,数据库中的ID转换出来为字符型,而接口是需要使用LONG型,所以在导出来后,数据一直报类型不为long,那如何把 ...

  4. saltstack实战2--远程执行之目标(target)

    target 就是目标的意思,你要在那台机器上执行此命令或此状态.或者说将此动作或者状态文件推送给谁来执行,让那个minion执行可以进行一些匹配 对于拥有大量机器的环境,如果单独一台台的执行指定mi ...

  5. AngularJS Tabular Data with Edit/Update/Delete

    效果 首先,我们先建立一些数据,当然你可以从你任何地方读出你的数据 var app = angular.module('plunker', ['ui.bootstrap']); app.control ...

  6. OpenMP多线程linux下的使用,简单化

    http://hi.baidu.com/diwulechao/item/bc6d865c411b813c32e0a932 http://www.cnblogs.com/yangyangcv/archi ...

  7. Objective-C 【多个对象内存管理(野指针&内存泄漏)】

    ------------------------------------------- 多个对象内存管理(野指针&内存泄漏) (注:这一部分知识请结合"单个对象内存管理"去 ...

  8. System.Windows.Forms.Timer反编译学习

    using System; using System.ComponentModel; using System.Globalization; using System.Runtime; using S ...

  9. UEditor的使用方法

    文本编辑器程序员都会用到,今天无意中发现UEditor是个好东西,特奉献给大家,并提供下载. 这个编辑器的亮点是可以显示当前输入多少字符,还可以输入多少字符. 新创建的MVC项目,在layout页面里 ...

  10. FreeCodeCamp-JS基础部分

    ---恢复内容开始--- .pop()     将数组末尾的元素移除     var removedFromMyArray=myArray.pop()     将myArray数组的最后一个元素移除并 ...