bzoj 2946 公共串 —— 后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946
建出 n-1 个后缀自动机一起跑呗。
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const xn=;
int n,lst[],cnt[],fa[][xn<<],l[][xn<<],go[][xn<<][],nw[];//<<1!!
char s[][xn];
void add(int t,int w)
{
int p=lst[t],np=++cnt[t]; lst[t]=np; l[t][np]=l[t][p]+;
for(;p&&!go[t][p][w];p=fa[t][p])go[t][p][w]=np;
if(!p)fa[t][np]=;
else
{
int q=go[t][p][w];
if(l[t][q]==l[t][p]+)fa[t][np]=q;
else
{
int nq=++cnt[t]; l[t][nq]=l[t][p]+;
memcpy(go[t][nq],go[t][q],sizeof go[t][q]);
fa[t][nq]=fa[t][q]; fa[t][q]=fa[t][np]=nq;
for(;go[t][p][w]==q;p=fa[t][p])go[t][p][w]=nq;
}
}
}
void build(int t)
{
lst[t]=; cnt[t]=;
int len=strlen(s[t]+);
for(int i=;i<=len;i++)add(t,s[t][i]-'a');
}
bool trans(int j)
{
int w=s[n][j]-'a';
for(int i=;i<n;i++)
{
if(!go[i][nw[i]][w])return ;
nw[i]=go[i][nw[i]][w];
}
return ;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",s[i]+);
if(i<n)build(i);
}
int ans=,len=strlen(s[n]+);
for(int i=,j;i<=len;i++)
{
for(j=;j<n;j++)nw[j]=;
for(j=i;j<=len;j++)if(!trans(j))break;
ans=max(ans,j-i);
}
printf("%d\n",ans);
return ;
}
bzoj 2946 公共串 —— 后缀自动机的更多相关文章
- BZOJ 2946: [Poi2000]公共串( 后缀自动机 )
一个串建后缀自动机, 其他串在上面跑, 然后用当前串跑的去更新全部 ------------------------------------------------------------------ ...
- bzoj 2946 [Poi2000]公共串——后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...
- BZOJ 2946 [Poi2000]公共串 ——后缀自动机
任意选择一个串作为模式串,构建出后缀自动机. 然后用其他的串在后缀自动机上跑匹配. 然后就到了理解后缀自动机性质的时候. 在某一个节点的最大值是可以沿着parent树上传的. 然后用dp[i][j]表 ...
- 【bzoj2946】[Poi2000]公共串 后缀自动机
[Poi2000]公共串 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1386 Solved: 620[Submit][Status][Discus ...
- BZOJ 2946 POI2000 公共串 后缀自动机(多串最长公共子串)
题意概述:给出N个字符串,每个串的长度<=2000(雾...可能是当年的年代太久远机子太差了),问这N个字符串的最长公共子串长度为多少.(N<=5) 抛开数据结构,先想想朴素做法. 设计一 ...
- BZOJ2946 [Poi2000]公共串(后缀自动机)
Description 给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l 读入单词 l 计算最长公共子串的长度 l 输 ...
- bzoj4032/luoguP4112 [HEOI2015]最短不公共子串(后缀自动机+序列自动机上dp)
bzoj4032/luoguP4112 [HEOI2015]最短不公共子串(后缀自动机+序列自动机上dp) bzoj Luogu 题解时间 给两个小写字母串 $ A $ , $ B $ ,请你计算: ...
- BZOJ 4032: [HEOI2015]最短不公共子串 后缀自动机 暴力
4032: [HEOI2015]最短不公共子串 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4032 Description 在虐各种最 ...
- bzoj 4032 [ HEOI 2015 ] 最短不公共子串 —— 后缀自动机+序列自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4032 序列自动机其实就是每个位置记录一下某字母后面第一个出现位置,为了子序列能尽量长. 对字 ...
随机推荐
- conda清华源 pip 清华源ubuntu 清华镜像 R代理以及包的安装
vim ~/.condarc channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/ - https:// ...
- 09-利用session完成用户登陆
/***********************************************login.html*****************************************/ ...
- ejabberd日志分析客户端登录流程
通过ejabberd的日志,整理了下客户端登录流程. 1. 通过TCP连接5222端口的流程: (1) 客户端向服务器发送stream流 <stream:stream to="nba. ...
- 在linux系统中I/O 调度的选择 (转)
I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色.他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能. 在linux下面列出4种调度算法 CFQ (Completel ...
- CentOS6.5升级内核从2.6.32到3.2.14
由于最近想要在服务器上跑IOU,但是在部署VMware后发现不能正常启动,总是提示内核无法载入,什么C header files matching your running kernel were n ...
- 【BZOJ2229】[Zjoi2011]最小割 最小割树
[BZOJ2229][Zjoi2011]最小割 Description 小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有 ...
- gridcontrol 之标题 GroupPanel设置 (标题设置,屏蔽右键)
GroupPanel设置 例如gridcontrol显示标题:“gridcontrol小例子” gridView1.GroupPanelText="gridcontrol小例子"; ...
- 这种实现方式比使用 += 要更节省内存和 CPU,尤其是要串联的字符串数目特别多的时候。
这种实现方式比使用 += 要更节省内存和 CPU,尤其是要串联的字符串数目特别多的时候. package main import ( "bytes" "fmt" ...
- 一阶 斜率 二阶 原函数的粗糙度 roughness
1 2 损失函数+惩罚函数 2阶导数
- ajax工作原理(转)
在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方面很窄,对AJAX技术的背景.原理.优缺点等各个方面都很少涉及null.这次写这篇文章的背景是因为公司需要对内部程序员做一个培训.项 ...