Description:

输出有哪些模式串在文本串中出现次数最多,这个次数是多少

Hint:

多组数据,$ len_{文本串}<=10^6,\sum len_{模式串} <= 70*150 $

Solution:

模板题,详见代码

// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
const int mxn=2e6+5;
char p[160][80],str[mxn];
int n,st[mxn],vis[mxn],ans[mxn];
queue<int > q; namespace Trie {
int mx,tot,cnt,fail[mxn],col[mxn],t[mxn][26];
void clear(int x) {
for(int i=0;i<26;++i) t[x][i]=0;
fail[x]=col[x]=0;
}
void ins(char *s,int id) {
int len=strlen(s),u=0;
for(int i=0;i<len;++i) {
if(!t[u][s[i]-'a']) t[u][s[i]-'a']=++tot,clear(tot);
u=t[u][s[i]-'a'];
}
col[u]=id;
}
void build() {
for(int i=0;i<26;++i)
if(t[0][i]) fail[t[0][i]]=0,q.push(t[0][i]);
while(!q.empty()) {
int u=q.front(); q.pop();
for(int i=0;i<26;++i) {
if(t[u][i]) fail[t[u][i]]=t[fail[u]][i],q.push(t[u][i]);
else t[u][i]=t[fail[u]][i];
}
}
}
int query(char *s) {
int len=strlen(s),u=0;
for(int i=0;i<len;++i) {
u=t[u][s[i]-'a'];
for(int v=u;v;v=fail[v]) {
if(col[v]!=0)
++ans[col[v]];
if(ans[col[v]]>mx) cnt=0,mx=ans[col[v]];
if(ans[col[v]]==mx) st[++cnt]=col[v];
}
}
return mx;
}
}
using namespace Trie; int main()
{
while(1) {
clear(0);
for(int i=1;i<=tot;++i) fail[i]=ans[i]=st[i]=col[i]=0;
mx=0,cnt=0,tot=0;
scanf("%d",&n);
if(n==0) break;
for(int i=1;i<=n;++i) scanf("%s",p[i]);
scanf("%s",str);
for(int i=1;i<=n;++i)
ins(p[i],i); build();
printf("%d\n",query(str));
sort(st+1,st+cnt+1);
for(int i=1;i<=cnt;++i)
cout<<p[st[i]]<<endl;
} return 0;
}

[模板][P3796]AC自动机(加强版)的更多相关文章

  1. 【模板】AC自动机加强版

    题目大意:给定 N 个模式串和一个文本串,求每个模式串在文本串中出现的次数. 题解:文本串在自动机上匹配的过程中,记录下自动机上每一个状态被访问的次数.对于访问到的节点 i,则状态 i 的后缀中存在的 ...

  2. P3796 【模板】AC自动机(加强版)

    P3796 [模板]AC自动机(加强版) https://www.luogu.org/problemnew/show/P3796 题目描述 有NN个由小写字母组成的模式串以及一个文本串TT.每个模式串 ...

  3. 【题解】P3796【模板】AC自动机(加强版)

    [题解]P3796 [模板]AC自动机(加强版) 记录当前\(cnt\)是第几个"星".记录第几个串是对应着第几个星. 这里补充一点对于\(AC\)自动机的理解.可能一直有个问题我 ...

  4. 洛谷P3796 - 【模板】AC自动机(加强版)

    原题链接 Description 模板题啦~ Code //[模板]AC自动机(加强版) #include <cstdio> #include <cstring> int co ...

  5. 洛谷 P3796 【模板】AC自动机(加强版)(AC自动机)

    题目链接:https://www.luogu.com.cn/problem/P3796 AC自动机:复杂度$O( (N+M)\times L )$,N为模式串个数,L为平均长度,M为文章长度. ins ...

  6. 「LuoguP3796」 【模板】AC自动机(加强版)

    题目描述 有N个由小写字母组成的模式串以及一个文本串T.每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串T中出现的次数最多. 输入输出格式 输入格式: 输入含多组数据. 每组数据的第一 ...

  7. 模板】AC自动机(简单版)

    模板]AC自动机(简单版) https://www.luogu.org/problemnew/show/P3808 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保 ...

  8. 【学时总结&模板时间】◆学时·10 & 模板·3◆ AC自动机

    ◇学时·10 & 模板·3◇ AC自动机 跟着高中上课……讲AC自动机的扩展运用.然而连KMP.trie字典树都不怎么会用的我一脸懵逼<(_ _)> 花一上午自学了一下AC自动机 ...

  9. 模板—字符串—AC自动机(多模式串,单文本串)

    模板—字符串—AC自动机(多模式串,单文本串) Code: #include <queue> #include <cstdio> #include <cstring> ...

随机推荐

  1. day1 diff命令递归比较目录下的文件

    一.diff实战 (1)递归比较文件夹下所有的文件及目录的不同 diff --brief -Nr dir1/ dir2/                               Reference ...

  2. centos6 -> zabbix2.2升级3.0.5教程

    当然系统版本centos6 清除之前的zabbix的yum源缓存 yum clean all 更换新版本的zabbix的yum源 rpm -qa|grep zabbix rpm -e zabbix-r ...

  3. 关于Java Web应用中的配置部署描述符web.xml

    一.web.xml概述 位于每个Web应用的WEB-INF路径下的web.xml文件被称为配置描述符,这个 web.xml文件对于Java Web应用十分重要,每个Java Web应用都必须包含一个w ...

  4. Linux多台机器配置ssh免登录

    .安装ssh. sudo apt-get install ssh. 安装完成后会在~目录(当前用户主目录,即这里的/home/xuhui)下产生一个隐藏文件夹.ssh(ls -a 可以查看隐藏文件). ...

  5. Python-CSS高级 题目

    一.简答1.完整总结display三种基础显示方式的显示方式与嵌套规则 /* inline */ /*1.同行显示, 就相当于纯文本, 当一行显示不下, 如就是一个字显示不下,那么显示不下的那一个字就 ...

  6. 石头剪刀布三局两胜(平局重来break用法)

  7. LeetCode(61):旋转链表

    Medium! 题目描述: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, ...

  8. mace

    作者:十岁的小男孩 QQ:929994365 心之安处即是吾乡. 本文主要的方向是终端移植.其主要又分两个小方向,理论和实践,即模型优化和模型移植.下文为前期写的,较为潦草,现在基本框架思路已经搭起来 ...

  9. python+selenium十:基于原生selenium的二次封装

    from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium ...

  10. unittest中更多的测试用例

    随着软件功能的不断增加,对应的测试用例也会呈指数级增长.一个实现几十个功能的项目,对应的单 元测试用例可能达到上百个.如果把所有的测试用例都写在一个 test.py 文件中,那么这个文件会越来越臃肿, ...