POJ2774 (后缀数组)
#include<cstdio>
#include<cstring>
using namespace std;
char a[],b[];
int sa[],x[],wv[],ws[],h[],rank[],wa[],wb[];
int cmp(int *r,int a,int b,int l){return (r[a]==r[b])&&(r[a+l]==r[b+l]);}
void calheight(int n,int *rank)
{
int i,j,k=;
for(i=;i<n;h[rank[i++]]=k)
for(k?k--:,j=sa[rank[i]-];a[i+k]==a[j+k];k++);
}
void DA(char *r,int *sa,int n,int m)
{
int i,j,k,*x=wa,*y=wb,*t,p;
for(i=;i<m;i++)ws[i]=;
for(i=;i<n;i++)ws[x[i]=r[i]]++;
for(i=;i<m;i++)ws[i]+=ws[i-];
for(i=n-;i>=;i--)sa[--ws[x[i]]]=i;
for(j=,p=;p<n;j*=,m=p)
{
for(p=,i=n-j;i<n;i++)y[p++]=i;
for(i=;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;
for(i=;i<n;i++)wv[i]=x[y[i]];
for(i=;i<m;i++)ws[i]=;
for(i=;i<n;i++)ws[wv[i]]++;
for(i=;i<m;i++)ws[i]+=ws[i-];
for(i=n-;i>=;i--)sa[--ws[wv[i]]]=y[i];
for(t=x,x=y,y=t,p=,x[sa[]]=,i=;i<n;i++)
x[sa[i]]=cmp(y,sa[i-],sa[i],j)?p-:p++;
}
calheight(n,x);
}
int main()
{
int la,lb,f_b,f_e,s_b,s_e,max,i,n;
scanf("%s",a);
la=strlen(a);
scanf("\n");
scanf("%s",b);
lb=strlen(b);
f_b=;
f_e=la-;
a[la]='#';
s_b=la;
for(i=;i<lb;i++)a[++la]=b[i];
s_e=la;
a[la+]=;
DA(a,sa,la+,);
//calheight(la+1);
max=-0x7fffffff;
for(i=;i<=la;i++)
{
if(h[i]>max&&((sa[i]>=f_b&&sa[i]<=f_e&&sa[i-]>=s_b&&sa[i-]<=s_e)||(sa[i]>=s_b&&sa[i]<=s_e&&sa[i-]>=f_b&&sa[i-]<=f_e)))max=h[i];
}
printf("%d",max);
return ;
}
POJ2774 (后缀数组)的更多相关文章
- POJ2774 & 后缀数组模板题
题意: 求两个字符串的LCP SOL: 模板题.连一起搞一搞就好了...主要是记录一下做(sha)题(bi)过程心(cao)得(dan)体(xin)会(qing) 后缀数组概念...还算是简单的,过程 ...
- poj2774 后缀数组2个字符串的最长公共子串
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 26601 Accepted: 10 ...
- poj2774 后缀数组 求最长公共子串
Reference:IOI2009论文 http://www.cnblogs.com/ziyi--caolu/p/3192731.html #include "stdio.h" # ...
- Long Long Message (poj2774 后缀数组求最长公共子串)
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 19206 Accepted: 79 ...
- 【POJ2774】Long Long Message(后缀数组)
[POJ2774]Long Long Message(后缀数组) 题面 Vjudge Description Little cat在Byterland的首都读物理专业.这些天他收到了一条悲伤地信息:他 ...
- POJ2774 Long Long Message —— 后缀数组 两字符串的最长公共子串
题目链接:https://vjudge.net/problem/POJ-2774 Long Long Message Time Limit: 4000MS Memory Limit: 131072 ...
- 【后缀数组】【poj2774】【 Long Long Message】
题意: 求两个串的最长连续子串. 我的想法: 枚举第二个串...在第一个串的后缀数组中二分查找. 复杂度NlogN.最坏情况N^2 题解: (3)height 数组:定义height[i]=suffi ...
- poj2774 Long Long Message 后缀数组求最长公共子串
题目链接:http://poj.org/problem?id=2774 这是一道很好的后缀数组的入门题目 题意:给你两个字符串,然后求这两个的字符串的最长连续的公共子串 一般用后缀数组解决的两个字符串 ...
- poj2774(后缀数组水题)
http://poj.org/problem?id=2774 题意:给你两串字符,要你找出在这两串字符中都出现过的最长子串......... 思路:先用个分隔符将两个字符串连接起来,再用后缀数组求出h ...
随机推荐
- 解决小米、红米及其他 Android 手机无法在 Mac 下进行真机调试的问题(转)
转自:http://ju.outofmemory.cn/entry/103522 Begin iOS 2014-08-19 271 阅读 手机 Android 小米 mac 调试 在 Mac OSX ...
- 让我们来简单说说mockjs吧!
背景: 新接手了一个更新CRM的客户管理项目,负责添加三张活动财务表与操作的模块,接到任务时候,后台还没有做数据,所以用到了假数据,So就是这里所说的mockjs. 介绍: mockjs让前端独立于后 ...
- 工作上遇到的问题 DEBUG 001
java文件断点跳到对应的class文件解决方式 我也是第一次遇到这个问题,找了很久解决办法.后面找开发组老大才解决. 问题描述: 调试程序,在ExportAction.java文件打断点.debug ...
- C函数
求阶乘 int fac(int a) { int i; ;i>;i--) a*=i; return a; }
- SQLite一些函数用法
--格林威治日期时间,比北京时间晚8小时 select datetime('now'); --格林威治日期 select date('now'); --本地时间 select time('now',' ...
- 结合nodejs开发aspnet5项目
1.安装kvm 官方教程地址:https://github.com/ligershark/Kulture 打开 powershell命令窗口,找不到可以在开始菜单菜单那块输入 powershell ...
- iframe布局
代码如下: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF ...
- 解决redhat 没注册的情况下yum无法使用的问题
官网下载的rhel,安装后是没有配置yum源的,需要自己配置yum源.网络上的很难找到rhel的yum源,但是在ISO镜像里面有很多redhat提供的软件包,也是正版软件,我们可以把这个拷贝出来 ...
- 推荐6款常用的Java开源报表制作工具
JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表.JasperReports 支持PDF.HTML.XLS.CSV和XML文件输出格 ...
- openssl pem 生成公钥和私钥及文件
openssl pem.h 中提供了关于pem格式密钥对的操作接口 通常使用.pem的格式文件来保存openssl 生成的密钥对: 在终端下 cat xxx.pem 可以看到 p.p1 { margi ...