【HDU2222】Keywords Search
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的更多相关文章
- 【HDU2222】Keywords Search AC自动机
[HDU2222]Keywords Search Problem Description In the modern time, Search engine came into the life of ...
- 【HDU2222】Keywords Search(AC自动机)
Problem Description In the modern time, Search engine came into the life of everybody like Google, B ...
- 【CF528D】Fuzzy Search(FFT)
[CF528D]Fuzzy Search(FFT) 题面 给定两个只含有\(A,T,G,C\)的\(DNA\)序列 定义一个字符\(c\)可以被匹配为:它对齐的字符,在距离\(K\)以内,存在一个字符 ...
- 【计算机视觉】Selective Search for Object Recognition论文阅读3
Selective Search for Object Recoginition surgewong@gmail.com http://blog.csdn.net/surgewong 在前 ...
- 【hdu 2222】Keywords Search
[题目链接] 点击打开链接 [算法] 此题是AC自动机模板题 AC自动机是很神奇的算法,简单点来说,就是在一棵字典树上进行KMP,它的应用范围很广,非常实用 这篇博客写得很好,推荐阅读 : http: ...
- 【AC自动机】Keywords Search
[题目链接] https://loj.ac/problem/10057 [题意] 原题来自:HDU 2222 给定 n 个长度不超过 50 的由小写英文字母组成的单词准备查询,以及一篇长为 m 的文 ...
- 【LeetCode】74. Search a 2D Matrix
Difficulty:medium More:[目录]LeetCode Java实现 Description Write an efficient algorithm that searches f ...
- C++之路进阶——hdu2222(Keywords Search)
/*Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- 【HDU 2222】Keywords Search AC自动机模板题
参考iwtwiioi的模板写出来的.上午gty讲的并没有听懂,只好自己慢慢对着模板理解. 在HDU上为什么相同的程序提交有时T有时A!!! 奉上sth神犇的模板(不是这道题): var ch:char ...
随机推荐
- Centos搭建nginx环境,编译,添加服务,开机启动。
首先安装所需的安装库,yum -y install gcc gcc-c++ autoconf libtool* openssl openssl-devel 编译的时候,若有提示错误,提示缺少某个库,y ...
- 【转】所需即所获:像 IDE 一样使用 vim
转自: https://github.com/yangyangwithgnu/use_vim_as_ide 所需即所获:像 IDE 一样使用 vim yangyangwithgnu@yeah.net ...
- python中那些双下划线开头得函数和变量--转载
Python中下划线---完全解读 Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __x ...
- git 一个文件还原到某个提交的commit
git checkout ${commit} /path/to/file 参考文献中1的参考链接中的git-checkout(1) Manual Page 中的Name: git-checkout - ...
- .NET学习笔记(1)— C#学习路线图
目录 一:引言 二:.NET技术体系 三:常用工具汇总 四:学习资源汇总 五:书籍推荐 六:关于阅读技术书籍的经验 七:总结 一:引言 因为工作调整,从PHP开发零基础转型到.NET开发,前期没有 ...
- JS轮播图
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- jquery easyui datagrid 分页 详解(java)
1.首先引入easyui包,可以在官方网站下载,http://www.jeasyui.com/download/index.php <link rel="stylesheet" ...
- Unity3d发布错误:could not allocate memery:system out of memery!
可能出现的原因: 1.项目太大了2.项目坏了3.资源坏了4.单个资源定点数超了e. 解决办法:删除了一些模型.是模型太大,面数.顶点数太多的原因. Unity3d里查看模型的顶点数 展开fbx ...
- HTTP相关知识 --转载
转载之,言简意赅
- Android OOM 解决方案
Out of Memory(内存溢出) 几乎是每个Android程序员都会遇到的事.在网上也能找到一大堆的解决方案,之前写过一篇<Android 内存溢出管理与测试>的博文.但感觉写得不是 ...