【HDU】2222 Keywords Search(AC自动机)
题目
传送门:QWQ
分析
$ AC $自动机模板,黈力的码风真的棒极了,这是我抄他的。
还有 题号不错
代码
#include <cstdio>
#include <cstring>
#define N 500007
using namespace std;
int n,rt,newp,i,m,l,r,son[N][],fail[N],cur,j,end[N],q[N],vis[N],ans[N],end2[N],end3[N];
char s[];
int find(int cur,int i){
if(!cur)return rt;
if(son[cur][i])return son[cur][i];
return fail[son[cur][i]]=find(fail[cur],i);
}
int main(){
int T; scanf("%d",&T);
while(T--)
{
memset(son,,sizeof(son));memset(fail,,sizeof(fail));memset(vis,,sizeof(vis));
memset(q,,sizeof(q));memset(end,,sizeof(end));memset(ans,,sizeof(ans));
memset(end2,,sizeof(end2)); memset(end3,,sizeof(end3));
scanf("%d",&n);
rt=newp=;
for(i=;i<=n;i++){
scanf("%s",s+);
m=strlen(s+);
for(cur=rt,j=;j<=m;j++){
if(!son[cur][s[j]-'a'])
son[cur][s[j]-'a']=++newp;
cur=son[cur][s[j]-'a'];
}
end[cur]=i;
end2[cur]++;
end3[i]=cur;
}
for(q[l=r=]=rt;l<=r;l++){
for(i=;i<;i++)
if(son[q[l]][i]){
fail[son[q[l]][i]]=find(fail[q[l]],i);
q[++r]=son[q[l]][i];
}
}
scanf("%s",s+);
m=strlen(s+);int ansx=;
for(i=,cur=rt;i<=m;i++)
cur=find(cur,s[i]-'a'),vis[cur]++;
for(i=r;i>=;i--){
vis[fail[q[i]]]+=vis[q[i]];
if(end[q[i]])
{
if(vis[q[i]]!=) ansx+=end2[q[i]];
}
}
printf("%d\n",ansx);
}
return ;
}
/*
1
10
ab aba bba a aa a a aba b b
ababbaba
*/
【HDU】2222 Keywords Search(AC自动机)的更多相关文章
- hdu 2222 Keywords Search——AC自动机
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2222 第一道AC自动机! T了无数边后终于知道原来它是把若干询问串建一个自动机,把模式串放在上面跑:而且只 ...
- hdu 2222 Keywords Search ac自动机入门
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意:有N(N <= 10000)个长度不超过50的模式串和一个长度不超过1e6的文本串. ...
- HDU 2222 Keywords Search(AC自动机模板题)
学习AC自动机请戳这里:大神blog........ 自动机的模板: #include <iostream> #include <algorithm> #include < ...
- HDU 2222 Keywords Search (AC自动机)
题意:就是求目标串中出现了几个模式串. 思路:用int型的end数组记录出现,AC自动机即可. #include<iostream> #include<cstdio> #inc ...
- hdu 2222 Keywords Search ac自动机模板
题目链接 先整理一发ac自动机模板.. #include <iostream> #include <vector> #include <cstdio> #inclu ...
- HDU 2222 Keywords Search (AC自动机)(模板题)
<题目链接> 题目大意: 给你一些单词,和一个字符串,问你这个字符串中含有多少个上面的单词. 解题分析: 这是多模匹配问题,如果用KMP的话,对每一个单词,都跑一遍KMP,那么当单词数量非 ...
- hdu 2222 Keywords Search - Aho-Corasick自动机
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- hdoj 2222 Keywords Search(AC自动机)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 思路分析:该问题为多模式匹配问题,使用AC自动机解决:需要注意的问题是如何统计该待查询的字符串包 ...
- hdu 2222 Keywords Search ac自己主动机
点击打开链接题目链接 Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- HDU 2222 Keywords Search AC自己主动机入门题
单词统计的题目,给出一些单词,统计有多少单词在一个文本中出现,最经典的入门题了. AC自己主动机的基础: 1 Trie. 以这个数据结构为基础的,只是添加一个fail指针和构造fail的函数 2 KM ...
随机推荐
- Eclipse上安装springsource-tool-suite
spring tool suite 是一个基于eclipseIDE开发环境中的用于开发spring应用程序的工具.提供了开箱即用的环境用于实现,调试和部署你的spring应用,包括为关键的的服务器和云 ...
- 我也说说Emacs吧(1) - Emacs和Vi我们都学
好友幻神的<Emacs之魂>正在火热连载中,群里人起哄要给他捧捧场. 作为一个学习Emacs屡败屡战的用户,这个场还是值得捧一下的.至少我是买了HHKB键盘的... 从我的键盘说起 - 有 ...
- C# 加密狗 超级狗 加密程序 程序授权示例 程序授权验证
本篇针对超级狗进行讲解,对应的超级狗套件的工具包版本为2.4版本.超级狗图片如下: 主要包含两个狗,一个是超级狗,一个是开发狗,在本博文中都是必须的.首先先安装光盘中的开发套间. 接下来就开始演示一个 ...
- go语言】Goroutines 并发模式
并发模式 让我们先来回顾一下boring函数的例子. func boring(msg string, c chan string) { for i := 0; ; i++ { c ...
- times(NULL) Segmentation fault
****************************************************************************** * times(NULL) Segment ...
- Git+GitHub+SaltStack
本文主要介绍日常工作中会经常使用到的一些工具软件. [ 01 ]SaltStack简明教程 [ 02 ]Git 中文教程 Git详解之一 Git起步 Git详解之二 Git基础 Git详解之三 Gi ...
- Android:LinearLayout布局中Layout_weight的深刻理解
首先看一下LinearLayout布局中Layout_weight属性的作用:它是用来分配属于空间的一个属性,你可以设置他的权重.很多人不知道剩余空间是个什么概念,下面我先来说说剩余空间. 看下面代码 ...
- laravel 中禁用掉注册功能
想让 laravel 做单用户登录,禁止掉注册功能 在 RegisterController 添加以下方法 public function showRegistrationForm() { retur ...
- test20181223
Written with StackEdit. T1 取石子(stone) Description 有\(n\)堆石子,第\(i\)堆有\(x_i\)个. \(Alice\)和\(Bob\)轮流取石子 ...
- C#/.NET 读取或修改文件的创建时间和修改时间
手工在博客中添加 Front Matter 文件头可是个相当费事儿的做法,这种事情就应该自动完成. .NET 中提供了非常方便的修改文件创建时间的方法,使用这种方法,能够帮助自动完成一部分文件头的编写 ...