传送门

ac自动机模板,可能我写的ac自动机是有点问题的,所以跑的有些慢

暴力跳fail统计

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
void read(int &x) {
char ch; bool ok;
for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
const int maxn=1e6+10;queue<int>q;
int ed[151],fail[maxn],n,rt=1,id=1,ch[maxn][26],ans,vis[maxn],w[151];char s[151][maxn],ss[maxn];
void insert(char *s,int d)
{
w[d]=strlen(s+1);rt=1;
for(rg int i=1;i<=w[d];i++)
{
int now=s[i]-'a';
if(!ch[rt][now])ch[rt][now]=++id;
rt=ch[rt][now];
}
ed[d]=rt;
}
void bfs()
{
q.push(1);
while(!q.empty())
{
int x=q.front();q.pop();
for(rg int i=0;i<26;i++)
{
if(!ch[x][i]){ch[x][i]=fail[x]?ch[fail[x]][i]:1;continue;}
int j=fail[x],z=ch[x][i];q.push(z);
while(j&&!ch[j][i])j=fail[j];
if(j)fail[z]=ch[j][i];
else fail[z]=1;
}
}
}
void solve()
{
int j=1,len=strlen(ss+1);
for(rg int i=1;i<=len;i++)
{
int now=ss[i]-'a';
while(j&&!ch[j][now])j=fail[j];
if(!ch[j][now])continue;j=ch[j][now];int k=j;
while(k)vis[k]++,k=fail[k];
}
int mx=0;
for(rg int i=1;i<=n;i++)if(mx<vis[ed[i]])mx=vis[ed[i]];
printf("%d\n",mx);
for(rg int i=1;i<=n;i++)
if(mx==vis[ed[i]]){for(rg int j=1;j<=w[i];j++)printf("%c",s[i][j]);printf("\n");}
}
int main()
{
while(1)
{
read(n);if(!n)return 0;id=1;
memset(ch,0,sizeof ch);
memset(fail,0,sizeof fail);
memset(vis,0,sizeof vis);
for(rg int i=1;i<=n;i++)scanf("%s",s[i]+1),insert(s[i],i);
bfs(),scanf("%s",ss+1),solve();
}
}

最新文章

  1. Spark&amp;Hadoop:scala编写spark任务jar包,运行无法识别main函数,怎么办?
  2. Web大文件下载控件(down2)-示例更新-Xproer.HttpDownloader
  3. node.js下when.js(Promises/A)的实践
  4. Socket与SocketServer结合多线程实现多客户端与服务器通信
  5. 【iCore3 双核心板】例程十九:USBD_MSC实验——虚拟U盘
  6. bzoj 1877: [SDOI2009]晨跑
  7. sql 常用操作脚本代码
  8. ASP.NET MVC 3 Model【通过一简单实例一步一步的介绍】
  9. webstorm配置scss环境
  10. jenkins实战(一):war安装及插件安装
  11. sql server登录名、服务器角色、数据库用户、数据库角色、架构区别联系
  12. 【RL-TCPnet网络教程】第37章 RL-TCPnet之FTP客户端
  13. Python3,x:Fiddler抓包工具如何进行手机APP的数据爬取
  14. Android应用更新-自动检测版本及自动升级
  15. Galaxy S10使用几乎零黑边框的OLED显示屏
  16. JS-排序详解-选择排序
  17. 1.1 从UNIX到Linux的发展历程
  18. BASE64Encoder/BASE64Decoder(转)
  19. CentOS 几种重启方式的区别
  20. 使用qt写的进制转换器

热门文章

  1. 使用酷Q SDK开发QQ机器人
  2. SVD分解的理解
  3. mysql给一张表新增字段,并设置该字段为外键
  4. Android Button Maker(在线生成android shape xml文件的工具),真方便!
  5. 怎样解决 no jzmq in java.library.path
  6. 分布式session之redis解决方案实现
  7. 如何查看ffmpeg支持的编码器和封装格式
  8. 【概念】SVG(2)
  9. hdu-5665 Lucky(水题)
  10. Java笔记(四)