COJ885 LCS???
试题描述
|
输入两个字符串A、B,输出他们的最长连续公共子串长度。
|
输入
|
第一行为一个字符串A。 第二行为一个字符串B。
|
输出
|
输出他们的最长连续公共子串长度。
|
输入示例
|
ababab bababbabb
|
输出示例
|
5
|
其他说明
|
1<=|A|,|B|<=100000 A、B均由小写字母a或b组成。
|
水水哒SAM
将A建立SAM,将B在A上运行,同时维护当前节点的最多匹配长度
#include<cstdio>
#include<cctype>
#include<queue>
#include<cstring>
#include<algorithm>
#define rep(s,t) for(int i=s;i<=t;i++)
#define ren for(int i=first[x];i!=-1;i=next[i])
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
const int maxn=;
int l[maxn],fa[maxn],to[maxn][],last=,cnt=;
void extend(int c) {
int p,q,np,nq;
p=last;l[np=last=++cnt]=l[p]+;
for(;!to[p][c];p=fa[p]) to[p][c]=np;
if(!p) fa[np]=;
else {
q=to[p][c];
if(l[p]+==l[q]) fa[np]=q;
else {
l[nq=++cnt]=l[p]+;
memcpy(to[nq],to[q],sizeof(to[nq]));
fa[nq]=fa[q];
fa[q]=fa[np]=nq;
for(;to[p][c]==q;p=fa[p]) to[p][c]=nq;
}
}
}
char s[maxn];
int main() {
scanf("%s",s);int n=strlen(s),p=,ans=,cur=;
rep(,n-) extend(s[i]-'a');
scanf("%s",s);n=strlen(s);
rep(,n-) {
int c=s[i]-'a';
if(to[p][c]) p=to[p][c],cur++;
else {
while(p&&!to[p][c]) p=fa[p];
if(!p) p=,cur=;
else cur=l[p]+,p=to[p][c];
}
ans=max(ans,cur);
}
printf("%d\n",ans);
return ;
}
COJ885 LCS???的更多相关文章
- 【奇怪现象】用联通访问某些ASP.NET网站会产生__EVENTVALIDATION字段,用电信却只有:__VIEWSTATE。【正常】?原因?
[奇怪现象]用联通访问某些ASP.NET网站会产生__EVENTVALIDATION字段,用电信却只有:__VIEWSTATE.[正常]?原因? 对于__VIEWSTATE和__EVENTVALIDA ...
- C#中 ? 和?? 的用法
C#中 ?? 和? 的意思 1.? 如果直接定义一个 值类型,给负值null:就会提示“无法将 Null转换成‘值类型(比如:int)’,因为他是一种不可为null的值 de类型” 例如 int in ...
- [TYVJ] P1025 单数?双数?
单数?双数? 背景 Background USACO OCT09 1ST 描述 Description Bessie那惨无人道的二年级老师搞了一个有 N (1 <= N <= 100) ...
- 为什么需要异步?why?来看一段代码。
为什么需要异步?why?来看一段代码. 问题1: for(var i=0;i<100000;i++){ } alert('hello world!!!'); 这段代码的意思是执行100...次后 ...
- http?https?相对协议?
1 1 1 将CDN 上所有链接的协议默认设置为“相对协议”,也就是链接以 // 开头,前面去掉了 http: 或 https: 字样, 这样做的好处是浏览器能够根据你的网站所采用的协议来自动加载 C ...
- 假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么?
假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么? 在执行这条语句的过程中,保存在result中的值被读 ...
- 假设result 是一个float型变量,value是一个int型变量。执行以下赋值语句以后,变量value将是什么类型?为什么?
假设result 是一个float型变量,value是一个int型变量.执行以下赋值语句以后,变量value将是什么类型?为什么? 在执行这条语句的过程中,保存在vulue变量中的值被读取出来并转化为 ...
- 下面哪些是无效的Java标识?为什么?
下面哪些是无效的Java标识?为什么? a.Factorial b.anExtremelyLongIdebtifierifyouAsKMe c.2ndLevel d.level2 e.MAX_SIZE ...
- 【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?
原文链接:http://www.51testing.com/html/49/n-3721249.html 前言 当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?loc ...
- 你曾后悔进入 IT 行业吗?为什么?(转自知乎)--一生不悔入IT
你曾后悔进入 IT 行业吗?为什么?(转自知乎)--一生不悔入IT 一.总结 一句话总结:看了大概200条评论,99%的不后悔,大部分人后悔没有早点干,但是做it最最主要的是要注意身体. 1.it是最 ...
随机推荐
- 使用twisted.web实现代理服务器
简单的实现谷歌的代理: 架构就是下面这么简单. ================= my server outside GFW | <----------------------> ...
- Nginx反向代理的目录访问问题
Nginx反向代理的目录访问问题 2013-05-13 23:21 2730人阅读 评论(0) 收藏 举报 从昨天就开始纠结了,在做实验的时候,遇到目录访问的问题,如下 前端nginx vhost的设 ...
- ubuntu14.04中国源
deb http://cn.archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse deb http://cn.ar ...
- Spring源码学习(二)AOP
----ProxyFactoryBean这个类,这是AOP使用的入口---- AOP有些特有的概念,如:advisor.advice和pointcut等等,使用或配置起来有点绕,让人感觉有些距离感,其 ...
- webdriver+python 对三大浏览器的支持
1.在IE浏览器上运行测试脚本,首先需要下载IEDriverServer.exe(http://code.google.com/p/selenium/downloads/list,根据浏览器的版本下载 ...
- 42.旋转数组的最小元素[Get min value of rotated array]
[题目] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个排好序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5 ...
- 12.从上往下遍历二元树[LevelOrderOfBinaryTree]
[题目] 输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印. 例如输入 8 / \ 6 10 /\ /\ 5 7 9 11 输出8 ...
- 【pymongo】连接认证 auth failed解决方法
故事背景: 我在虚拟机(ip:192.168.xx.xx)上建立了一个mongo的数据库,里面已经存好了内容.里面的一个database叫做 "adb", 里面有个collecti ...
- Action返回类型
1.返回ascx页面return PartialView(); 2.Content(),返回文本ContentResultreturn Content("这是一段文本"); 3.J ...
- jQuery 知识点积累
1.判断checkbox是否选中 $("#aa").prop("checked")==true2.给属性赋值 $("#aa").pr ...