题目

传送门: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自动机)的更多相关文章

  1. hdu 2222 Keywords Search——AC自动机

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2222 第一道AC自动机! T了无数边后终于知道原来它是把若干询问串建一个自动机,把模式串放在上面跑:而且只 ...

  2. hdu 2222 Keywords Search ac自动机入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意:有N(N <= 10000)个长度不超过50的模式串和一个长度不超过1e6的文本串. ...

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

    学习AC自动机请戳这里:大神blog........ 自动机的模板: #include <iostream> #include <algorithm> #include < ...

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

    题意:就是求目标串中出现了几个模式串. 思路:用int型的end数组记录出现,AC自动机即可. #include<iostream> #include<cstdio> #inc ...

  5. hdu 2222 Keywords Search ac自动机模板

    题目链接 先整理一发ac自动机模板.. #include <iostream> #include <vector> #include <cstdio> #inclu ...

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

    <题目链接> 题目大意: 给你一些单词,和一个字符串,问你这个字符串中含有多少个上面的单词. 解题分析: 这是多模匹配问题,如果用KMP的话,对每一个单词,都跑一遍KMP,那么当单词数量非 ...

  7. hdu 2222 Keywords Search - Aho-Corasick自动机

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  8. hdoj 2222 Keywords Search(AC自动机)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 思路分析:该问题为多模式匹配问题,使用AC自动机解决:需要注意的问题是如何统计该待查询的字符串包 ...

  9. hdu 2222 Keywords Search ac自己主动机

    点击打开链接题目链接 Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  10. HDU 2222 Keywords Search AC自己主动机入门题

    单词统计的题目,给出一些单词,统计有多少单词在一个文本中出现,最经典的入门题了. AC自己主动机的基础: 1 Trie. 以这个数据结构为基础的,只是添加一个fail指针和构造fail的函数 2 KM ...

随机推荐

  1. 【PL/SQL编程】循环语句

    1. loop语句 loop plsql_sentence; exit when end_condition_exp; end loop; loop语句会先执行一次循环体,然后再判断“exit whe ...

  2. windows7 下python3.6 下Scripts文件夹为空

    windows7 下python3.6 下Scripts文件夹为空,安装后不能运行pip,这个时候输入命令: python -m ensurepip 会自动安装pip,然后运行pip3 list就可以 ...

  3. React-Native基础_2.样式Style

    2.样式Style 基本使用 方式1 直接在View 上面写style 内容 <View style={{ backgroundColor: '#07811d', flex: 1 }}> ...

  4. 我也说说Emacs吧(7) - lisp基础

    lisp基础 Lisp是仅次于Fortran的第二古老的著名计算机语言. Lisp从一开始就与众不同的一点在于,它是基于S-表达式的语言.也就是说,代码和数据是用同一种方式表达出来的. S-表达式,我 ...

  5. 【Keras学习】常见问题与解答

    Keras FAQ:常见问题 如何引用Keras? 如果Keras对你的研究有帮助的话,请在你的文章中引用Keras.这里是一个使用BibTex的例子 @misc{chollet2015keras, ...

  6. windows cmd 命令行 —— 进程与服务

    1. 进程查看与操作 tasklist tskill pid 2. 服务查看与操作 net start net stop

  7. python 两种导入的区别

    参考文献: 法1:import module1 使用:这样你调用时就得:module1.funct(),funct2(),... 法2:from module1 import funct() 使用就直 ...

  8. Git详解之五 分布式Git

    以下内容转载自:http://www.open-open.com/lib/view/open1328070090108.html 分布式 Git 为了便于项目中的所有开发者分享代码,我们准备好了一台服 ...

  9. ubuntu下erlang man的安装

    下载 http://www.erlang.org/download/otp_doc_man_17.1.tar.gz 找到erlang 安装目录 解压 otp_doc_man_17.1.tar.gz s ...

  10. IOI2002 POJ1054 The Troublesome Frog 讨厌的青蛙 (离散化+剪枝)

    Description In Korea, the naughtiness of the cheonggaeguri, a small frog, is legendary. This is a we ...