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 ...
随机推荐
- Codeforces Beta Round #1 补题题解
A Theatre Square(数学) 算出每行能装多少乘以每列能装多少就行 公式 ans=ceil(n/a)+ceil(m/a) 代码 #include <bits/stdc++.h> ...
- SDOI2015约数个数和
题目描述 题解: 有一个式子: 证明先不说了. 然后倒一波反演: 然后整除分块就好了. 代码: #include<cstdio> #include<cstring> #incl ...
- 【spring】jar包详解与模块依赖关系
以spring3.X为例 jar包详解 1. spring-core.jar:包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心: 2. spri ...
- Go:二分查找
package main import "fmt" func BinarySearch(arr *[5]int, leftIndex int, rightIndex int, fi ...
- 【Html,Css,JavaScript】初学总结
网页制作 HTML 一.通用模板: <!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8 ...
- python书籍推荐:Python数据科学手册
所属网站分类: 资源下载 > python电子书 作者:today 链接:http://www.pythonheidong.com/blog/article/448/ 来源:python黑洞网 ...
- 九度oj 题目1525:子串逆序打印
题目1525:子串逆序打印 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:3124 解决:530 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在 ...
- JavaEE JDBC 补充注意点
JDBC补充注意点 @author ixenos 1.一个Statement对象可以用于多个不相关的命令和查询,但是一个Statement对象最多只能有一个打开的结果集,如果需要同时执行多个查询同时分 ...
- 在win10配置环境变量
从win7升级成win10后找不到在哪配置环境变量...手动再见ヾ( ̄▽ ̄)Bye~,废话不多说,下面开始图文模式: 1)打开文件资源管理器,点左上角的"计算机"
- 【springmvc】传值的几种方式&&postman接口测试
最近在用postman测试postman接口,对于springmvc传值这一块,测试了几种常用方式,总结一下.对于postman这个工具的使用也增加了了解.postman测试很棒,有了工具,测试接口, ...