SPOJ-LCS Longest Common Substring 【后缀自动机】
题目分析:
用没出现过的字符搞拼接。搞出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 【后缀自动机】的更多相关文章
- SPOJ1811 LCS - Longest Common Substring(后缀自动机)
A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is the s ...
- SPOJ 1811 Longest Common Substring (后缀自动机第一题,求两个串的最长公共子串)
题目大意: 给出两个长度小于等于25W的字符串,求它们的最长公共子串. 题目链接:http://www.spoj.com/problems/LCS/ 算法讨论: 二分+哈希, 后缀数组, 后缀自动机. ...
- SPOJ 1811 Longest Common Substring 后缀自动机
模板来源:http://www.neroysq.com/?p=76 思路:http://blog.sina.com.cn/s/blog_7812e98601012dfv.html 题意就是求两个字符串 ...
- 后缀自动机(SAM) :SPOJ LCS - Longest Common Substring
LCS - Longest Common Substring no tags A string is finite sequence of characters over a non-empty f ...
- spoj 1811 LCS - Longest Common Substring (后缀自己主动机)
spoj 1811 LCS - Longest Common Substring 题意: 给出两个串S, T, 求最长公共子串. 限制: |S|, |T| <= 1e5 思路: dp O(n^2 ...
- SPOJ LCS Longest Common Substring 和 LG3804 【模板】后缀自动机
Longest Common Substring 给两个串A和B,求这两个串的最长公共子串. no more than 250000 分析 参照OI wiki. 给定两个字符串 S 和 T ,求出最长 ...
- SPOJ LCS(Longest Common Substring-后缀自动机-结点的Parent包含关系)
1811. Longest Common Substring Problem code: LCS A string is finite sequence of characters over a no ...
- SPOJ LCS Longest Common Substring(后缀自动机)题解
题意: 求两个串的最大\(LCS\). 思路: 把第一个串建后缀自动机,第二个串跑后缀自动机,如果一个节点失配了,那么往父节点跑,期间更新答案即可. 代码: #include<set> # ...
- SPOJ LCS - Longest Common Substring 字符串 SAM
原文链接http://www.cnblogs.com/zhouzhendong/p/8982392.html 题目传送门 - SPOJ LCS 题意 求两个字符串的最长公共连续子串长度. 字符串长$\ ...
- [SPOJ1811]Longest Common Substring 后缀自动机 最长公共子串
题目链接:http://www.spoj.com/problems/LCS/ 题意如题目,求两个串的最大公共子串LCS. 首先对其中一个字符串A建立SAM,然后用另一个字符串B在上面跑. 用一个变量L ...
随机推荐
- 浅谈ST表
发现自己学的一直都是假的ST表QWQ. ST表 ST表的功能很简单 它是解决RMQ问题(区间最值问题)的一种强有力的工具 它可以做到$O(nlogn)$预处理,$O(1)$查询最值 算法 ST表是利用 ...
- 51nod“省选”模测第二场 C 小朋友的笑话(线段树 set)
题意 题目链接 Sol 直接拿set维护\(li\)连续段.因为set内的区间互不相交,而且每个线段会被至多加入删除一次,所以复杂度是对的. #include<bits/stdc++.h> ...
- 驰骋工作流引擎JFlow与activiti的对比之2种取消模式
1. 取消模式(Cancel Activity) 就是将某个活动取消. JFLOW中,类似与删除流程操作相同. 不能删除:不允许删除. 逻辑删除:仅仅将此流程标记为删除状态,数据仍然存在节点表单与流程 ...
- java对接申通下单接口示例代码
上面是控制台示例代码 public class Sample{ private final static String URL = "http://order.sto-express.cn: ...
- SQLServer数据库维护(一)碎片检查整理
一.碎片查看维护 dbcc showcontig('表名') dbcc showcontig ('T_NOFITSTUDY') 结果如下: DBCC SHOWCONTIG 正在扫描 'T_NOFITS ...
- 【原】Java学习笔记022 - 字符串
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 字符串 // 定义 ...
- RHEL6 删除软RAID
停止使用RAID: 1.umount raid组上的硬盘的所用的分区 若使用raid组创建vg,需要删除或去激活VG 2.停止raid服务 mdadm -S /dev/md0 3.清除MBR # md ...
- 既然CPU同一时间只能执行一个线程,为什么存在并发问题
一点小疑惑终于解开啦 1.CPU的时间是按时间片分的,而不是一个时间点,并发问题是由于CPU线程切换导致的. 现在假设有一段代码 if(i == 1) { i++; //断点1 system.out. ...
- Jenkins+VS项目持续集成
软件安装 安装包下载连接:https://jenkins.io/download/ 安装步奏:略 账户名:admin 密码:C:\Program Files (x86)\Jenkins\secrets ...
- linux 系统信息展示 htop glances conky psensor
htop glances conky psensor htop glances 只能在终端内展示. htop 使用系统自带程序包管理程序就可以安装 glances github地址:https://g ...