初识后缀自动机;

推荐学习: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的更多相关文章

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

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

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

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

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

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

  4. SPOJ - LCS 后缀自动机入门

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

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

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

  6. SPOJ LCS 后缀自动机

    用后缀自动机求两个长串的最长公共子串,效果拔群.多样例的时候memset要去掉. 解题思路就是跟CLJ的一模一样啦. #pragma warning(disable:4996) #include< ...

  7. SPOJ LCS 后缀自动机找最大公共子串

    这里用第一个字符串构建完成后缀自动机以后 不断用第二个字符串从左往右沿着后缀自动机往前走,如能找到,那么当前匹配配数加1 如果找不到,那么就不断沿着后缀树不断往前找到所能匹配到当前字符的最大长度,然后 ...

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

    Longest Common Substring \[ Time Limit: 294ms \quad Memory Limit: 1572864 kB \] 题意 给出两个串,求两个串的最长公共连续 ...

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

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

随机推荐

  1. .NET技能分析

    知乎话题:如何面试.NET/ASP.NET工程师? No.1初级:1.对 C#(推荐) 或 VB 语言直至与 .NET 4 (目前为止)相匹配的版本,绝大多数特性熟悉并使用过2.通晓 HTTP 协议的 ...

  2. jquery自动生成二维码

    把下面的jquery代码放到想要在当前页面上面生成二维码: 代码如下: <script type="text/javascript">var _qrContent='' ...

  3. 将Cent0S 7的网卡名称eno16777736改为eth0

    新建的虚拟机redhat linux7默认的网卡名称是eno16777736,找不到eth0如图所示: 修改网卡名称: 输入如下命令,进入对应目录,编辑文件: vim /etc/sysconfig/g ...

  4. DropdownListFor无法正确绑定值-同名问题

     DropdownListFor无法正确绑定值 如果以下面的方式进行绑定: <%: Html.DropDownListFor(model => model.subType, ViewBag ...

  5. linux 常见问题

    无root权限install do chmod u+w /etc/sudoers sudo vi /etc/sudoers 找到root   ALL=(ALL:ALL) ALL 在下面加一行: you ...

  6. Poj/OpenJudge 1042 Gone Fishing

    1.链接地址: http://bailian.openjudge.cn/practice/1042/ http://poj.org/problem?id=1042 2.题目: Gone Fishing ...

  7. 实现scp自动输入密码(判断yesno选项)

    1.apt-get install expect 2.编写shell脚本test.sh #!/usr/bin/expect -f#!/bin/shset password 1spawn scp roo ...

  8. lucene 4.0学习

    一:官方文件 http://lucene.apache.org/core/4_0_0/ ps:网上参考文章:http://www.cnblogs.com/xing901022/p/3933675.ht ...

  9. cache在spring中使用

    一:参考文章 (1)http://haohaoxuexi.iteye.com/blog/2123030  Spring使用Cache,这篇文章讲的比较详细. 注:本文是对参考文章和实际使用中经验的总结 ...

  10. JSFunction-Javascript常用函数库

    最近正在整理书写常用的Javascript函数库,此函数库近期会持续更新 JSFunction 这里可以找到你经常想要使用的js函数,我正在努力完善它 希望它对你有所帮助 相信代码是优雅的舞者.--北 ...