spoj LCS
初识后缀自动机;
推荐学习:http://blog.sina.com.cn/s/blog_7812e98601012dfv.html
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 600009
using namespace std; char s[maxn]; struct node
{
int l;
node *ch[],*fail;
} pool[maxn],*head,*tail;
int top;
void add(int x)
{
node *p=&pool[++top],*bj=tail;
p->l=tail->l+;
tail=p;
for(; bj&&!bj->ch[x]; bj=bj->fail)
bj->ch[x]=p;
if(!bj)p->fail=head;
else if(bj->l+==bj->ch[x]->l)p->fail=bj->ch[x];
else
{
node *r=&pool[++top],*q=bj->ch[x];
*r=*q;
r->l=bj->l+;
p->fail=q->fail=r;
for(; bj&&bj->ch[x]==q; bj=bj->fail)bj->ch[x]=r;
}
} int main()
{
scanf("%s",s);
int n=strlen(s);
head=tail=&pool[++top];
for(int i=; i<n; i++)
add(s[i]-'a'+);
scanf("%s",s);
n=strlen(s);
tail=head;
int mid=,ans=;
for(int i=; i<n; i++)
{
if(tail->ch[s[i]=s[i]-'a'+])
{
++mid;
tail=tail->ch[s[i]];
}
else
{
while(tail&&!tail->ch[s[i]])tail=tail->fail;
if(!tail)tail=head,mid=;
else
{
mid=tail->l+;
tail=tail->ch[s[i]];
}
}
ans=max(ans,mid);
}
printf("%d\n", ans);
return ;
}
spoj LCS的更多相关文章
- SPOJ LCS - Longest Common Substring 字符串 SAM
		
原文链接http://www.cnblogs.com/zhouzhendong/p/8982392.html 题目传送门 - SPOJ LCS 题意 求两个字符串的最长公共连续子串长度. 字符串长$\ ...
 - 后缀自动机(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 LCS(Longest Common Substring-后缀自动机-结点的Parent包含关系)
		
1811. Longest Common Substring Problem code: LCS A string is finite sequence of characters over a no ...
 - SPOJ - LCS 后缀自动机入门
		
LCS - Longest Common Substring A string is finite sequence of characters over a non-empty finite set ...
 - SPOJ LCS Longest Common Substring(后缀自动机)题解
		
题意: 求两个串的最大\(LCS\). 思路: 把第一个串建后缀自动机,第二个串跑后缀自动机,如果一个节点失配了,那么往父节点跑,期间更新答案即可. 代码: #include<set> # ...
 - SPOJ LCS 后缀自动机
		
用后缀自动机求两个长串的最长公共子串,效果拔群.多样例的时候memset要去掉. 解题思路就是跟CLJ的一模一样啦. #pragma warning(disable:4996) #include< ...
 - SPOJ LCS 后缀自动机找最大公共子串
		
这里用第一个字符串构建完成后缀自动机以后 不断用第二个字符串从左往右沿着后缀自动机往前走,如能找到,那么当前匹配配数加1 如果找不到,那么就不断沿着后缀树不断往前找到所能匹配到当前字符的最大长度,然后 ...
 - Longest Common Substring SPOJ - LCS (后缀自动机)
		
Longest Common Substring \[ Time Limit: 294ms \quad Memory Limit: 1572864 kB \] 题意 给出两个串,求两个串的最长公共连续 ...
 - SPOJ LCS Longest Common Substring 和 LG3804 【模板】后缀自动机
		
Longest Common Substring 给两个串A和B,求这两个串的最长公共子串. no more than 250000 分析 参照OI wiki. 给定两个字符串 S 和 T ,求出最长 ...
 
随机推荐
- 电脑小白自学软件编程-.Net语法基础之循环语句,纯技巧干货
			
写代码也要读书,爱全栈,更爱生活.每日更新原创IT编程技术及日常实用视频. 我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下. 本教程是基础教程,适合任何有志于学习软件开发的 ...
 - 读jQuery官方文档:数据方法与辅助方法
			
数据方法 有时候你可能想要在元素上面储存数据.由于浏览器兼容性问题,用原生JavaScript处理元素上的数据可能会造成内存溢出,jQuery可以帮你自动处理这些问题: //储存和取出元素数据 $(' ...
 - 一个Notification 进度条插件(android,NJS实现,直接就可使用)
			
参考文章:http://ask.dcloud.net.cn/article/503 源码地址下载 如题,分享一个Notification 进度条插件(android,用js调用原生api实现,直接就可 ...
 - js获取jsp中的变量值
			
js获取jsp中的变量值,有两种方式: 1.jsp标签获取属性 var message = '<%=request.getAttribute("message")%>' ...
 - vmware workstation 12 安装windows7 网卡不能安装驱动的问题
			
在使用vmware workstation 12 安装windows7 之后,网卡不能安装驱动不能正常显示网络连接,需要修改该虚拟机的".vmx"配置文件 在配置文件中添加下面一行 ...
 - popen  pclose 不等待命令执行完毕
			
$handle = popen("start D:\\test.bat", "r"); //exec("start D:\\test.bat" ...
 - 第三篇、FMDB使用
			
简介: FMDB是基于SQlite3的封装一个第三方的OC库,操作起来更加简单,性能比Coredata更加高. 1.创建sqlite文件 2.导入FMDB头文件 3.创建数据库表table 4.编写s ...
 - iOS开发——推送证书
			
(最近准备考试……空闲截图整理成博客)
 - OC2_数组操作
			
// // main.m // OC2_数组操作 // // Created by zhangxueming on 15/6/11. // Copyright (c) 2015年 zhangxuemi ...
 - 图片裁切插件jCrop的使用心得(四)
			
在本篇中我来介绍一下jcrop如何实时展现用户裁切的效果图以及在项目中使用该插件注意的问题. 首先,你们在创建头像时,都可以在旁边实时的看到我裁切后的效果图,就如博客园. 这个是如何实现的呢,其实并不 ...