#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
struct trie{
int next[500010][26],fail[500010],end[500010];
int root,L;
int newnode()
{
for(int i=0;i<26;i++)
{
next[L][i]=-1;
}
end[L++]=0;
return L-1;
}
void init()
{
L=0;
root=newnode();
}
void insert(char buf[])
{
int len=strlen(buf);
int now=root;
for(int i=0;i<len;i++)
{
if(next[now][buf[i]-'a']==-1)
next[now][buf[i]-'a']=newnode();
now=next[now][buf[i]-'a'];
}
end[now]++;
}
void build()
{
queue<int>Q;
fail[root]=root;
for(int i=0;i<26;i++)
{
if(next[root][i]==-1)
{
next[root][i]=root;
}
else
{
fail[next[root][i]]=root;
Q.push(next[root][i]);
}
}
while(!Q.empty())
{
int now=Q.front();
Q.pop();
for(int i=0;i<26;i++)
{
if(next[now][i]==-1)
next[now][i]=next[fail[now]][i];
else
{
fail[next[now][i]]=next[fail[now]][i];
Q.push(next[now][i]);
}
}
}
}
int query(char buf[])
{
int len=strlen(buf);
int now=root;
int res=0;
for(int i=0;i<len;i++)
{
now=next[now][buf[i]-'a'];
int temp=now;
while(temp!=root)
{
res+=end[temp];
end[temp]=0;
temp=fail[temp];
}
}
return res;
}
};
char buf[1000010];
trie ac;
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ac.init();
for(int i=0;i<n;i++)
{
scanf("%s",buf);
ac.insert(buf);
}
ac.build();
scanf("%s",buf);
printf("%d\n",ac.query(buf));
}
return 0;
}
相关推荐
C++ AC自动机算法
目录: AC自动机简介 如何构造 AC自动机 算法实现 1、建树 2、预处理失配指针 nex: 3、匹配 AC自动机例题推荐 AC自动机简介: 正所谓 AC自动机,就是能自动 AC 的算法。 AC自动机全称:Aho-Corasick automaton,该算法于1975年产生于贝尔实验室,是著名的多模匹配算法。 实际上,AC自动机就是在 Trie 树上实现KMP,来达到完成多模式串匹配的效...
几种AC机,自动做编程题的程序,非常牛逼
几种AC机,自动做编程题的程序,非常牛逼
[置顶]AC自动机-算法详解
What's Aho-Corasick automaton? 一种多模式串匹配算法,该算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一。 简单的说,KMP用来在一篇文章中匹配一个模式串;但如果有多个模式串,需要在一篇文章中把出现过的模式串都匹配出来,就需要Aho-Corasick automaton算法了。 My Understanding About Aho-Coras
算法与数据结构进阶课第十三节笔记
AC自动机与卡特兰数 AC自动机 1)关键在于fail指针的理解(网上帖子几乎没有解释) fail指针含义:目前来到的节点,之前路径上的字符串记为str,除了str之外哪个前缀字符串,和str的后缀串匹配最大,fail指针就指向那个最大匹配串的最后字符底下的节点。(难理解吧?其实是精髓,看视频) 2)构建和使用看视频 ...
AC自动机代码
一个简单的实现AC自动机的程序,运行工具:Visual Studio 2013
中文高性能AC自动机代码
C语言实现,效率极高,实现了中文的关键字匹配,输出的格式为偏移量加上关键字(中文编码为GB2312)
AC自动机算法
AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有字典树Trie和KMP模式匹配算法的基础知识。KMP算法是单模式串的字符匹配算法,AC自动机是多模式串的字符匹配算法。
字典树实现AC自动机
本文档主要是字典树实现AC自动机用于多模式字符串的匹配算法,包括源代码
AC 自动机算法 JAVA代码 实现
AC自动机算法 1、简要概述 什么是AC自动机算法? AC自动机算法是一种多模式字符串匹配算法,什么是多模式?从单模式说起,举个kmp算法的例子,单模式就是利用kmp算法验证某个敏感词在一个字符串内是否存在;多模式是说验证多个敏感词在一个字符串内是否存在。如果使用kmp来做的话,依次遍历多个敏感词,每个敏感词使用kmp验证,当敏感词数量很多的时候效率很低,这时候就用到AC自动机算法了。 为什么AC自动机算法效率高? 结论:其能在约为O(n) 的时间复杂度内完成对多个敏感词的查找,而且
HDU 自动 AC 机(Python)
一款 HDU OJ 的自动刷题工具,搜索来源可选用 百度搜索 / 必应搜索,支持并行以及串行查找,祝早日刷上航电首页哦~ 使用 Python 编写,执行之前你需要在同目录下创建文件 aclog.txt ,然后粘贴进你目前已经 AC 的题目,然后在代码执行过程中便不会去再查找这些题了。
多模式匹配 ac自动机 dawg自动机
多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机多模式匹配 ac自动机 dawg自动机
AC自动机(详解)
需要提前了解的知识:KMP, 字典树 例题:传送门 AC自动机是KMP和字典树的结合体, 如果说KMP用于单模式匹配,那么AC自动机是用于多模式匹配的。 举个例子,KMP适用于在一篇文章中找一句话, AC自动机适合在一篇文章中寻找多句话(并不是简单的多用几次KMP)。 KMP算法构建了一个查询表(nex数组), 我们可以按照相同的思路构建nex表,在ac自动机中成为失配数组。 算法思路: 先将所有的模式串建立字典树, 建立nex数组,然后就开始匹配。 ...
AC自动机
基于字典树的ac自动机,自己前期的实现,具有源码参考,用于查找可屏蔽应用
AC自动机算法详解以及Java代码实现
详细介绍了AC自动机算法详解以及Java代码实现。
手把手教你用CEFSharp打造防关联指纹浏览器(附完整代码)
本文详细介绍了如何基于CEFSharp框架,从零开始构建一个企业级的防关联指纹浏览器。通过剖析核心架构、多进程隔离实现、动态指纹混淆(如Canvas、WebGL)的实战代码,以及代理集成与性能优化,为跨境电商、广告投放等场景提供了一套可控、安全的开源解决方案。
别再花钱买商业软件了!这4款免费DIC工具,从散斑生成到应变分析全搞定
本文介绍了4款免费开源的DIC(数字图像相关技术)工具,涵盖从散斑生成到应变分析的全流程,帮助用户零成本构建专业级DIC工作流。这些工具在精度、算法透明度和生态整合方面具有优势,适用于材料力学和实验力学研究,可替代昂贵的商业软件。
字符串处理【AC自动机】 - 原理 AC自动机详解
字符串处理【AC自动机】 - 原理 AC自动机详解
保姆级教程:用OSSH免费版+FreeRADIUS+FreeAC NAC,从零搭建一套企业级无线Portal认证系统
本文提供了一套基于OSSH免费版、FreeRADIUS和FreeAC NAC的企业级无线Portal认证系统搭建教程。从环境规划、核心组件安装到认证策略与用户管理,详细介绍了如何利用开源工具构建高效、安全的认证体系,特别适用于预算有限但需求严格的企业场景。
AC自动机:如何实现敏感词过滤?
文章目录
02-Cesium-实现天地图标记
首先天地图申请token,然后Cesium-实现天地图标记详细说明
Gazebo仿真平台模型搭建与修改
ROS里踩过的坑(一)Gazebo仿真平台模型搭建与修改文件讲解Models 文件World文件Launch文件模型编辑可视化编辑配置文件编辑模型展示如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出...
2319



被折叠的 条评论
为什么被折叠?



