caioj1472: 后缀自动机1:多个串的LCS
子串母串跑合并答案
一个点的fail的dep是比任意一条根到这个点路径长度要小的。
那么改就可以直接来了。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int len,a[];
struct SAM
{
int w[],dep,fail;
}ch[];int cnt,last;
void insert(int dep,int x)
{
int pre=last,now=++cnt; ch[now].dep=dep;
last=now; while(pre!=&&ch[pre].w[x]==)
ch[pre].w[x]=now, pre=ch[pre].fail;
if(pre==)ch[now].fail=;
else
{
int nxt=ch[pre].w[x];
if(ch[nxt].dep==ch[pre].dep+)ch[now].fail=nxt;
else
{
int nnxt=++cnt;
ch[nnxt]=ch[nxt];
ch[nnxt].dep=ch[pre].dep+; ch[now].fail=ch[nxt].fail=nnxt;
while(pre!=&&ch[pre].w[x]==nxt)
ch[pre].w[x]=nnxt, pre=ch[pre].fail;
}
}
}
int Rsort[],sa[];
void sssort()
{
for(int i=;i<=cnt;i++)Rsort[ch[i].dep]++;
for(int i=;i<=len;i++)Rsort[i]+=Rsort[i-];
for(int i=cnt;i>=;i--)sa[Rsort[ch[i].dep]--]=i;
} int f[],g[];
void solve()
{
int now=,L=;
memset(f,,sizeof(f));
for(int i=;i<=len;i++)
{
int x=a[i];
while(now!=&&ch[now].w[x]==)
now=ch[now].fail, L=ch[now].dep;
if(ch[now].w[x]!=)
{
L++;
now=ch[now].w[x];
f[now]=max(f[now],L);
}
}
for(int i=cnt;i>=;i--)
{
int x=sa[i],y=ch[sa[i]].fail;
f[y]=min(ch[y].dep,max(f[y],f[x]));
} for(int i=;i<=cnt;i++)g[i]=min(g[i],f[i]);
}
char ss[];
int main()
{
scanf("%s",ss+);len=strlen(ss+);
cnt=last=; ch[].dep=;
for(int i=;i<=len;i++)
a[i]=ss[i]-'a'+, insert(i,a[i]);
sssort(); memset(g,,sizeof(g));
while(scanf("%s",ss+)!=EOF)
{
len=strlen(ss+);
for(int i=;i<=len;i++)a[i]=ss[i]-'a'+;
solve();
} int ans=;
for(int i=;i<=cnt;i++)ans=max(ans,g[i]);
if(ans<=)printf("They are too short!\n");
else printf("True\n%d\n",ans);
return ;
}
caioj1472: 后缀自动机1:多个串的LCS的更多相关文章
- 【BZOJ3277】串(后缀自动机)
[BZOJ3277]串(后缀自动机) 题面 BZOJ 题解 广义后缀自动机??? 照着别人的打了一遍.. 相当于每个串都构建一个后缀自动机 构建完一个串之后,直接把当前的last指回root就行了?? ...
- BZOJ 2946 [Poi2000]公共串 (二分+Hash/二分+后缀数组/后缀自动机)
求多串的最长公共字串. 法1: 二分长度+hash 传送门 法2: 二分+后缀数组 传送门 法3: 后缀自动机 拿第一个串建自动机,然后用其他串在上面匹配.每次求出SAM上每个节点的最长匹配长度后,再 ...
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...
- 【Codeforces235C】Cyclical Quest 后缀自动机
C. Cyclical Quest time limit per test:3 seconds memory limit per test:512 megabytes input:standard i ...
- SPOJ 1812 Longest Common Substring II(后缀自动机)
[题目链接] http://www.spoj.com/problems/LCS2/ [题目大意] 求n个串的最长公共子串 [题解] 对一个串建立后缀自动机,剩余的串在上面跑,保存匹配每个状态的最小值, ...
- BZOJ5417[Noi2018]你的名字——后缀自动机+线段树合并
题目链接: [Noi2018]你的名字 题目大意:给出一个字符串$S$及$q$次询问,每次询问一个字符串$T$有多少本质不同的子串不是$S[l,r]$的子串($S[l,r]$表示$S$串的第$l$个字 ...
- [学习笔记]后缀自动机SAM
好抽象啊,早上看了两个多小时才看懂,\(\%\%\%Fading\) 早就懂了 讲解就算了吧--可以去看看其他人的博客 1.[模板]后缀自动机 \(siz\) 为该串出现的次数,\(l\) 为子串长度 ...
- spoj - Longest Common Substring(后缀自动机模板题)
Longest Common Substring 题意 求两个串的最长公共子串. 分析 第一个串建后缀自动机,第二个串在自动机上跑,对于自动机上的结点(状态)而言,它所代表的最大长度为根结点到当前结点 ...
- CODE【VS】3160 最长公共子串 (后缀自动机)
3160 最长公共子串 题目描述 Description 给出两个由小写字母组成的字符串,求它们的最长公共子串的长度. 输入描述 Input Description 读入两个字符串 输出描述 Outp ...
随机推荐
- Web项目ConcurrentModificationException异常
后台SSH在做Session删除的时候,遇到了ConcurrentModificationException异常. 参考资料:http://blog.csdn.net/idesvo/article/d ...
- css float属性详解
定义和用法 float 属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动.浮动元素会生成一个块级框,而不论它本身是何种元素.如果浮动非 ...
- Luogu P4299 首都 LCT
既然是中文题目,这里便不给题意. 分析: 这个题的做法据说是启发式合并? 但是我不会啊…… 进入正题,LCT是怎样做掉这道题的.记得在前面的一篇<大融合>的题解中,介绍过LCT维护子树信息 ...
- 笔试算法题(39):Trie树(Trie Tree or Prefix Tree)
议题:TRIE树 (Trie Tree or Prefix Tree): 分析: 又称字典树或者前缀树,一种用于快速检索的多叉树结构:英文字母的Trie树为26叉树,数字的Trie树为10叉树:All ...
- MySQL-----增
增 **创建用户** create user 'alex'@'192.168.1.1' identified by '123123'; create user 'alex'@'192.168.1.%' ...
- h-ui.admin.pro.iframe头部和标签Tab修改CSS
原效果:头部高度偏高,tab标签不太好看 修改后:缩小高度,调整tab标签css样式 百度网盘链接:https://pan.baidu.com/s/1qknPNAMGL7BFUIsleOF9M ...
- 关于自定义checkbox-radio标签的样式的方法(label 和 background-position理解)
label label标签有一个很好的作用就是扩大表单控件元素的点击区域. 一般有两种方法可以达到效果:(1)使用label标签包裹表单控件(2)设置label标签的for属性和表单的id属性一致 这 ...
- stm32 调试时卡在LDR R0, =SystemInit
网上找到的可能的原因 堆栈空间默认的太小 默认startup_stm32f10x_hd.s中 Stack_Size EQU 0x00000400,如果改大之后,可能调试就可以正常运行. 出现最多的情况 ...
- intellij idea 忽略文件不提交
文件已经纳入版本管理 如果文件已经纳入版本了,应该采用此方法 此方法主要应对文件已经纳入版本管理,但不想再提交,比如,不小心提交的eclipse.intellij的文件,以后不想再提交了,这种就通过v ...
- css3 & background & background-image
css3 & background & background-image https://developer.mozilla.org/en-US/docs/Web/CSS/backgr ...