[LuoguP3808] 【模板】AC自动机(简单版)数组版
待填坑
Code
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N=1000000+1000;
struct AC_AutoMation
{
#define root 0
static const int sigma_size=26;
struct node
{
int nxt[sigma_size],sum,fa,fail;
}t[N*5];
int tot;
void Insert(char c[])
{
int now=root,len=strlen(c+1);
for(int i=1;i<=len;i++)
{
if(t[now].nxt[c[i]-'a']==0)
t[now].nxt[c[i]-'a']=++tot;
now=t[now].nxt[c[i]-'a'];
}
t[now].sum++;
}
void Build()
{
queue <int> Q;
for(int i=0;i<sigma_size;i++)
if(t[root].nxt[i]!=0)
Q.push(t[root].nxt[i]);
while(!Q.empty())
{
int now=Q.front();
Q.pop();
for(int i=0;i<sigma_size;i++)
if(t[now].nxt[i]!=0)
{
int temp=t[now].fail;
while(t[temp].nxt[i]==0 and temp!=root)
temp=t[temp].fail;
t[t[now].nxt[i]].fail=t[temp].nxt[i];
Q.push(t[now].nxt[i]);
}
}
}
int Query(char c[])
{
int ans=0,len=strlen(c+1),now=root;
for(int i=1;i<=len;i++)
{
int x=c[i]-'a';
while(t[now].nxt[x]==0 and now!=root) now=t[now].fail;
now=t[now].nxt[x];
int temp=now;
while(temp!=root)
{
if(t[temp].sum>=0)
{
ans+=t[temp].sum;
t[temp].sum=-1;
temp=t[temp].fail;
}
else break;
}
}
return ans;
}
#undef root
}trie;
int n;
char c[N];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",c+1);
trie.Insert(c);
}
trie.Build(); scanf("%s",c+1);
printf("%d",trie.Query(c));
return 0;
}
[LuoguP3808] 【模板】AC自动机(简单版)数组版的更多相关文章
- luoguP3808[模板]AC自动机(简单版)
传送门 ac自动机模板题,裸的多串匹配 代码: #include<cstdio> #include<iostream> #include<algorithm> #i ...
- 洛谷P2414 阿狸的打字机 [NOI2011] AC自动机+树状数组/线段树
正解:AC自动机+树状数组/线段树 解题报告: 传送门! 这道题,首先想到暴力思路还是不难的,首先看到y有那么多个,菜鸡如我还不怎么会可持久化之类的,那就直接排个序什么的然后按顺序做就好,这样听说有7 ...
- 【BZOJ】2434: [Noi2011]阿狸的打字机 AC自动机+树状数组+DFS序
[题意]阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写 ...
- hdu 1277 AC自动机入门(指针版和数组版)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1277 推荐一篇博客(看思路就可以,实现用的是java): https://www.cnblogs.co ...
- 字典树模板( 指针版 && 数组版 )
模板 : #include<string.h> #include<stdio.h> #include<malloc.h> #include<iostream ...
- BZOJ2434: [Noi2011]阿狸的打字机(AC自动机 树状数组)
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4140 Solved: 2276[Submit][Status][Discuss] Descript ...
- 「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组
题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能 ...
- Codeforces 547E - Mike and Friends(AC 自动机+树状数组)
题面传送门 好久每做过 AC 自动机的题了--做几个题回忆一下罢 AC 自动机能够解决多串匹配问题,注意是匹配,碰到前后缀的问题那多半不在 AC 自动机能解决的范围内. 在初学 AC 自动机的时候相信 ...
- tyvj P1519 博彩游戏(AC自动机+DP滚动数组)
P1519 博彩游戏 背景 Bob最近迷上了一个博彩游戏…… 描述 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到一个随机序列:有M个序列,如果某个序列是产生的随机序列的 ...
- 算法模板——AC自动机
实现功能——输入N,M,提供一个共计N个单词的词典,然后在最后输入的M个字符串中进行多串匹配(关于AC自动机算法,此处不再赘述,详见:Aho-Corasick 多模式匹配算法.AC自动机详解.考虑到有 ...
随机推荐
- tornado-简介和原理
tornado-设计初衷 1. 追求小而精 2. epoll IO多路复用和协程 3. 支持WebSocket 4. 单线程程序(GIL限制,本身某种意义上不启动多进程就是单线程程序) # Pytho ...
- Ubuntu18.04修改apt-get源
1)备份源文件: sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2)查看版本信息 如是Linux Mint等Ubuntu衍生版,执行: ...
- CSP-S 2019 游记,以及AFO
CSP-S:Day1 195 Day2 84 滚粗,AFO. Day0 和cyl神仙打了一会儿游戏,九点半教了cyl一下LCT,开始写板子题,写到十点半,睡觉. Day1 六点半起床.吃饭.赶赴考场, ...
- Cisco思科模拟器 交换机IP地址的配置 入门详解 - 精简归纳
Cisco思科模拟器 交换机IP地址的配置 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 10 / 10 转载请注明出处!️ 目录 Cisco思科模拟器 交换机IP地址的配置 入门详解 ...
- BUUCTF-[极客大挑战 2019]PHP 1
打开题目,我们就看到这个猫,先是用鼠标晃了晃,还跟着我的光标摇脑袋.我是来做题的.前端工程师肯定也对这个下功夫了. 有一个良好的备份网站的习惯很好啊,我们首先根据题目的提示,用dirsearch扫目录 ...
- 多测师讲解_python_pycharm基本实用操作__保存代码_
pycharm中中保存代码的方式: 方式一: 方式二: 第一步: 第二步:
- golang常用库:字段参数验证库-validator
背景 在平常开发中,特别是在web应用开发中,为了验证输入字段的合法性,都会做一些验证操作.比如对用户提交的表单字段进行验证,或者对请求的API接口字段进行验证,验证字段的合法性,保证输入字段值的安全 ...
- SQL Server语法入门
1.说明:增加.删除一个列 Alter table tablename add columnName col type alter table tablename drop columnName co ...
- 使用docker安装E
环境 虚拟机软件VmWare15.5 Centos7.0 安装docker yum install docker
- mysql锁 转
参考文章:https://blog.csdn.net/puhaiyang/article/details/72284702 一.mysql锁的结构图 如上图所示,针对mysql的innodb存储引擎, ...