题目分析:

用没出现过的字符搞拼接。搞出right树,找right集合的最小和最大。如果最小和最大分居两侧可以更新答案。

代码:

 #include<bits/stdc++.h>
using namespace std; const int maxn = ; int son[maxn][],fa[maxn],maxlen[maxn],root,num,sigma = ;
int minn[maxn],maxx[maxn];// lright rright string str,ss;
int n,m;
vector<int> T[maxn]; int addnew(int dt){maxlen[++num] = dt;return num;}
int ins(char x,int p,int hhhh){
int np = addnew(maxlen[p]+); minn[np] = maxx[np] = hhhh;
while(p && !son[p][x-'a']) son[p][x-'a'] = np,p = fa[p];
if(!p){fa[np] = root; return np;}
else{
int q = son[p][x-'a'];
if(maxlen[q]==maxlen[p]+){fa[np]=q;return np;}
else{
int nq = addnew(maxlen[p]+);
for(int i=;i<sigma;i++) son[nq][i] = son[q][i];
fa[nq] = fa[q]; fa[q] = fa[np] = nq;
while(p && son[p][x-'a'] == q) son[p][x-'a'] = nq,p = fa[p];
return np;
}
}
} void dfs(int now){
if(!minn[now]) minn[now] = 1e9;
for(int i=;i<T[now].size();i++){
dfs(T[now][i]);
minn[now] = min(minn[now],minn[T[now][i]]);
maxx[now] = max(maxx[now],maxx[T[now][i]]);
}
} void work(){
int lst = addnew();root = lst;
for(int i=;i<str.length();i++)
lst = ins(str[i],lst,i+);
for(int i=;i<=num;i++) T[fa[i]].push_back(i);
dfs(); int ans = ;
for(int i=;i<=num;i++)if(minn[i]<=n&&maxx[i]>n+)ans=max(ans,maxlen[i]);
cout<<ans<<endl;
} int main(){
ios::sync_with_stdio(false);
cin.tie();
cin >> str; cin >> ss;
n = str.length(); m = ss.length();
str += ('z'+); str += ss;
work();
return ;
}

SPOJ-LCS Longest Common Substring 【后缀自动机】的更多相关文章

  1. SPOJ1811 LCS - Longest Common Substring(后缀自动机)

    A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is the s ...

  2. SPOJ 1811 Longest Common Substring (后缀自动机第一题,求两个串的最长公共子串)

    题目大意: 给出两个长度小于等于25W的字符串,求它们的最长公共子串. 题目链接:http://www.spoj.com/problems/LCS/ 算法讨论: 二分+哈希, 后缀数组, 后缀自动机. ...

  3. SPOJ 1811 Longest Common Substring 后缀自动机

    模板来源:http://www.neroysq.com/?p=76 思路:http://blog.sina.com.cn/s/blog_7812e98601012dfv.html 题意就是求两个字符串 ...

  4. 后缀自动机(SAM) :SPOJ LCS - Longest Common Substring

    LCS - Longest Common Substring no tags  A string is finite sequence of characters over a non-empty f ...

  5. spoj 1811 LCS - Longest Common Substring (后缀自己主动机)

    spoj 1811 LCS - Longest Common Substring 题意: 给出两个串S, T, 求最长公共子串. 限制: |S|, |T| <= 1e5 思路: dp O(n^2 ...

  6. SPOJ LCS Longest Common Substring 和 LG3804 【模板】后缀自动机

    Longest Common Substring 给两个串A和B,求这两个串的最长公共子串. no more than 250000 分析 参照OI wiki. 给定两个字符串 S 和 T ,求出最长 ...

  7. SPOJ LCS(Longest Common Substring-后缀自动机-结点的Parent包含关系)

    1811. Longest Common Substring Problem code: LCS A string is finite sequence of characters over a no ...

  8. SPOJ LCS Longest Common Substring(后缀自动机)题解

    题意: 求两个串的最大\(LCS\). 思路: 把第一个串建后缀自动机,第二个串跑后缀自动机,如果一个节点失配了,那么往父节点跑,期间更新答案即可. 代码: #include<set> # ...

  9. SPOJ LCS - Longest Common Substring 字符串 SAM

    原文链接http://www.cnblogs.com/zhouzhendong/p/8982392.html 题目传送门 - SPOJ LCS 题意 求两个字符串的最长公共连续子串长度. 字符串长$\ ...

  10. [SPOJ1811]Longest Common Substring 后缀自动机 最长公共子串

    题目链接:http://www.spoj.com/problems/LCS/ 题意如题目,求两个串的最大公共子串LCS. 首先对其中一个字符串A建立SAM,然后用另一个字符串B在上面跑. 用一个变量L ...

随机推荐

  1. Zookeeper 分布式机器部署

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  2. 如何解决Dynamics 365的错误:用户身份验证无效,MSIS0006

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复246或者20170312可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  3. SQL Server 数据库调整表中列的顺序操作

    SQL Server 数据库中表一旦创建,我们不建议擅自调整列的顺序,特别是对应的应用系统已经上线,因为部分开发人员,不一定在代码中指明了列名.表是否可以调整列的顺序,其实可以自主设置,我们建议在安装 ...

  4. PYTHON常用数据类型(列表,元组,字典)

    一.数字 1.整形:就是整数. 2.浮点型:就是小数. 3.布尔型:True或者是False,python里严格区分格式,空格缩进或者是大小写. 4.运算符有+ – * / ()%(求模运算取余数)* ...

  5. SQL c# 程序报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

    报错:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序.System.Data 需要注意的问题和解决方法: 1.Microsoft.Jet.OLEDB.4.0不要写成Mi ...

  6. Clickhouse v18编译记录

    简介 ClickHouse是"战斗民族"俄罗斯搜索巨头Yandex公司开源的一个极具"战斗力"的实时数据分析数据库,是面向 OLAP 的分布式列式DBMS,圈内 ...

  7. 宋宝华:关于Ftrace的一个完整案例【转】

    Ftrace简介 Ftrace是Linux进行代码级实践分析最有效的工具之一,比如我们进行一个系统调用,出来的时间过长,我们想知道时间花哪里去了,利用Ftrace就可以追踪到一级级的时间分布. Ftr ...

  8. 协程demo,1异步爬网页 2异步socket请求

    一.异步爬网页 ''' 协程并发爬网页 ''' from urllib import request import gevent,time from gevent import monkey # 让g ...

  9. 研究好vif 和vshow

    另外从源头上处理的???,怎么自己排查出错误??必须 ??https://www.jb51.net/article/124116.htm

  10. 应用 memcached 提升站点性能

    减少读自数据库和数据源 开源 memcached 工具是一个用来存储常用信息的缓存,有了它,您便无需从缓慢的资源,比如磁盘或数据库,加载(并处理)信息了.该工具可部署在专用的情况下,也可作为用完现有环 ...