luogu P3796 【模板】AC自动机(加强版)
知识点:1.一定要删掉调试信息
2.数组别重名
code:
#include <bits/stdc++.h>
using namespace std;
int n;
int len[];
char c[];
char a[][];
int ans[];
struct ACtree
{
int cnt;
int f[],sfaf[];
int ch[][],val[];
void init()
{
cnt = ;
memset(f,,sizeof(f));
memset(sfaf,,sizeof(sfaf));
memset(ch,,sizeof(ch));
memset(val,,sizeof(val));
}
void insert(int t)
{
int u = ;
len[t] = strlen(a[t]);
for(int i = ;i < len[t];i++)
{
int k = a[t][i] - 'a';
if(!ch[u][k])
{
ch[u][k] = ++cnt;
u = ch[u][k];
}
else u = ch[u][k];
}
val[u] = t;
}
void getfail()
{
queue <int> q;
q.push();
while(!q.empty())
{
int u = q.front();
q.pop();
for(int i = ;i < ;i++)
{
int v = ch[u][i];
if(!v){ch[u][i] = ch[f[u]][i];continue;}
q.push(v);
f[v] = u?ch[f[u]][i]:;
sfaf[v] = val[f[v]]?f[v]:sfaf[f[v]];
}
}
}
void work()
{
int u = ;
int lena = strlen(c);
for(int i = ;i < lena;i++)
{
int k = c[i] - 'a';
u = ch[u][k];
if(val[u])
{
ans[val[u]]++;
}
int v = u;
while(sfaf[v])
{
v = sfaf[v];
if(val[v])
{
ans[val[v]]++;
}
}
}
}
}ac;
int main()
{//freopen("in.in","r",stdin);
while()
{
memset(ans,,sizeof(ans));
scanf("%d",&n);
if(!n)return ;
for(int i = ;i <= n;i++)
{
scanf("%s",a[i]);
ac.insert(i);
}
ac.getfail();
scanf("%s",c);
ac.work();
int maxn = ;
for(int i = ;i <= n;i++)
{
maxn = max(maxn,ans[i]);
}
printf("%d\n",maxn);
for(int i = ;i <= n;i++)
{
if(ans[i] == maxn){for(int j = ;j < len[i];j++)printf("%c",a[i][j]);printf("\n");}
}
ac.init();
}
return ;
}
luogu P3796 【模板】AC自动机(加强版)的更多相关文章
- luoguP3796[模板]AC自动机(加强版)
传送门 ac自动机模板,可能我写的ac自动机是有点问题的,所以跑的有些慢 暴力跳fail统计 代码: #include<cstdio> #include<iostream> # ...
- luoguP3808[模板]AC自动机(简单版)
传送门 ac自动机模板题,裸的多串匹配 代码: #include<cstdio> #include<iostream> #include<algorithm> #i ...
- 算法模板——AC自动机
实现功能——输入N,M,提供一个共计N个单词的词典,然后在最后输入的M个字符串中进行多串匹配(关于AC自动机算法,此处不再赘述,详见:Aho-Corasick 多模式匹配算法.AC自动机详解.考虑到有 ...
- 模板 AC自动机
题目描述 有$N$ 个由小写字母组成的模式串以及一个文本串$T$ .每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串$T$ 中出现的次数最多. 输入输出格式 输入格式: 输入含多组数据 ...
- 算法竞赛模板 AC自动机
AC自动机基本操作 (1) 在AC自动机中,我们首先将每一个模式串插入到Trie树中去,建立一棵Trie树,然后构建fail指针. (2) fail指针,是穿插在Trie树中各个结点之间的指针,顾名思 ...
- [模板][P3796]AC自动机(加强版)
Description: 输出有哪些模式串在文本串中出现次数最多,这个次数是多少 Hint: 多组数据,$ len_{文本串}<=10^6,\sum len_{模式串} <= 70*150 ...
- 【模板】AC自动机加强版
题目大意:给定 N 个模式串和一个文本串,求每个模式串在文本串中出现的次数. 题解:文本串在自动机上匹配的过程中,记录下自动机上每一个状态被访问的次数.对于访问到的节点 i,则状态 i 的后缀中存在的 ...
- 洛谷.3808/3796.[模板]AC自动机
题目链接:简单版,增强版 简单版: #include <cstdio> #include <cstring> const int N=1e6+5,S=26; char s[N] ...
- 模板—AC自动机
#include<iostream> #include<cstdio> #include<cstring> using namespace std; struct ...
- 模板——AC自动机
传送门:QAQQAQ 定义nxt[u]=v表示从u开始不断沿着失配边跳到的第一个是标记点的端点v,那么我们再匹配时沿着last跳,每跳到一个last,它就一定对应一个模式串,所以效率是非常高的. 和K ...
随机推荐
- 注重代码习惯,Python零基础从这本书籍开始!
笨办法学 Python是Zed Shaw 编写的一本Python入门书籍.适合对计算机了解不多,没有学过编程,但对编程感兴趣的朋友学习使用.这本书以习题的方式引导读者一步一步学习编 程,从简单的打印一 ...
- jQuery 发布微博案例
.box { width: 500px; height: 500px; border: 1px solid #efefef; margin: 0 auto; text-align: center; } ...
- Catalina 默认使用zsh了,你可习惯
zsh 成为默认 shell 淘汰掉我的旧MBP换新后,欢天喜地打开Terminal,感觉有点不对,提示符什么时候变成了 %. 查询了一些资料发现,原来在2019年WWDC期间,苹果推出了macOS ...
- MySQL数据库——数据约束
1 什么数据约束 对用户操作表的数据进行约束 2 默认值(缺省约束) 作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值. 注意: 1)对默认值字段插入null是可以的 2)对默认值字段可以 ...
- C++游戏(大型PC端枪战游戏)服务器架构
实习期间深入参与到某大型pc端枪战游戏的后端开发中,此游戏由著名游戏工作室编写,代码可读性极高,自由时间对游戏后台代码进行了深入研究,在满足自身工作需要的同时对游戏后台的架构也有了理解,记录在此,以便 ...
- 树莓派 4B VNC Viewer 显示 cannot currently show the desktop 的解决方法 (图文)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/ZChen1996/article/de ...
- CC协议是怎么一回事?
CC协议是怎样的? CC-BY-NC-SA (创作共用许可协议) "知识共享"(CC协议)简单介绍 如何使用CC协议? CC 协议使用 FAQ CC协议选择工具 本文章采用 CC ...
- SSRF 跨站请求伪造学习笔记
参考文章: 了解SSRF,这一篇就足够了 SSRF 学习之路 SSRF绕过方法总结 Weblogic SSRF漏洞 What-是什么 SSRF(Server-Side Request Forgery) ...
- 面试中HashMap链表成环的问题你答出了吗
HashMap作为老生常谈的问题,备受面试官的青睐,甚至成为了面试必问的问题.由于大量的针对HashMap的解析横空出世,面试官对HashMap的要求越来越高,就像面试官对JVM掌握要求越来越高一样, ...
- 《从缺陷中学习CC++》总结
从缺陷中学习CC++总结 从本质上来说,这就是一个CC++的错题集.全书中包括63个问题引发的错误,即书名中的缺陷.共分为10章,每一张还有一个比较经典的小结,个人感觉这本书只需要仔细看一下每一章后面 ...