学习地址:http://blog.csdn.net/yxuanwkeith/article/details/50636898

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
char s[maxn],s1[maxn],s2[maxn];
int ans,tax[maxn],tp[maxn],sa[maxn],ra[maxn],H[maxn],n,m;
void rsort(){
for(int i=;i<=m;++i)tax[i]=;
for(int i=;i<=n;++i)tax[ra[tp[i]]]++;
for(int i=;i<=m;++i)tax[i]+=tax[i-];
for(int i=n;i>=;--i)sa[tax[ra[tp[i]]]--]=tp[i];
}
int cmp(int x,int y,int w){return tp[x]==tp[y]&&tp[x+w]==tp[y+w];}
void pre(){
for(int i=;i<=n;++i)ra[i]=s[i]-'a'+,tp[i]=i;
m=;rsort();
for(int w=,p=,i;p<n;w+=w,m=p){
//p==n是说明已经得到各个后缀之间的大小关系,故可跳出循环
//并且最后p一定能==n因为各个后缀长度不一样,一定能排出一个序;
for(p=,i=n-w+;i<=n;++i)tp[++p]=i;
for(i=;i<=n;++i)if(sa[i]>w)tp[++p]=sa[i]-w;
rsort();swap(ra,tp);ra[sa[]]=p=;
//这里换一下才方便由这一次的ra得到下一次的ra;
for(i=;i<=n;++i)ra[sa[i]]=cmp(sa[i],sa[i-],w)?p:++p;
}
int j,k=;
for(int i=;i<=n;H[ra[i++]]=k)
for(k=k?k-:k,j=sa[ra[i]-];s[i+k]==s[j+k];++k);
}
int main(){
scanf("%s%s",s1+,s2+);
int len1=strlen(s1+),len2=strlen(s2+);
for(int i=;i<=len1;++i)s[i]=s1[i];
s[len1+]='a'+;
for(int i=;i<=len2;++i)s[i+len1+]=s2[i];
n=len1+len2+;
pre();ans=;
//for(int i=1;i<=n;++i)cout<<sa[i]<<' '<<H[i]<<endl;
for(int i=;i<=n;++i){
if((sa[i-]<=len1)!=(sa[i]<=len1)&&ans<H[i])ans=H[i];
}
cout<<ans;
system("pause");
return ;
}
/*
yeshowmuchiloveyoumydearmotherreallyicannotbelieveit
yeaphowmuchiloveyoumydearmother
*/

poj2774 sa模版的更多相关文章

  1. 【POJ2774】Long Long Message (SA)

    最长公共子串...两个字符串连在一起,中间放一个特殊字符隔开.求出height之后,枚举height,看两个后缀是不是分布于两段字符串..如果是,这个值就可以作为答案.取最大值即可. ; var c, ...

  2. 创建ABPboilerplate模版项目

    本文是根据角落的白板报的<通过ABPboilerplate模版创建项目>一文的学习总结,感谢原文作者角落的白板报. 1 准备 开发环境: Visual Studio 2015 update ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(29)-T4模版

    系列目录 本节不再适合本系统,在58,59节已经重构.请超过本节 这讲适合所有的MVC程序 很荣幸,我们的系统有了体验的地址了.演示地址 之前我们发布了一个简单的代码生成器,其原理就是读取数据库的表结 ...

  4. 一套后台管理html模版

    最近自己需要一套后台管理的模版,然后去网上查找,模版的确很多,但是适合我的并不多.我需要的模版是不会很大,我能够控制代码,样式不要太古朴,最好有点CSS3的效果.最后终于找到一张主页,然后再根据这个主 ...

  5. 【poj2774】 Long Long Message

    http://poj.org/problem?id=2774 (题目链接) 题意 给出两个只包含小写字母的字符串,求出最长连续公共子串. solution 第一次用后缀数组,感觉有点神...才发现原来 ...

  6. POJ2774 & 后缀数组模板题

    题意: 求两个字符串的LCP SOL: 模板题.连一起搞一搞就好了...主要是记录一下做(sha)题(bi)过程心(cao)得(dan)体(xin)会(qing) 后缀数组概念...还算是简单的,过程 ...

  7. .NET设计模式(16):模版方法(Template Method)(转)

    摘要:Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要. 主要内容 1.概述 2.Template Method解说 3..NET中的Te ...

  8. HDU 1301 Jungle Roads (最小生成树,基础题,模版解释)——同 poj 1251 Jungle Roads

    双向边,基础题,最小生成树   题目 同题目     #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<stri ...

  9. 【POJ2774】Long Long Message (后缀数组)

    Long Long Message Description The little cat is majoring in physics in the capital of Byterland. A p ...

随机推荐

  1. Linux locales

    一.简介   二.语法   三.实例 aptitude install locales dpkg-reconfigure locales ; vi /etc/default/locale more / ...

  2. iis日志分析软件及大文本切割软件下载

    在网上找了好几个日志分析软件,觉得这个是最简单.实用的,至少对我来说. 但这个软件有个缺点,就是日志比较大时,分析详细的会溢出,需要用到文本切割工具. 软件下载: iis日志分析软件 大文本切割软件 ...

  3. andorid UI事件 监听器

    gridlayout.xml <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns ...

  4. OSX.PackageManager-Homebrew

    How to install pip on mac? http://stackoverflow.com/questions/12092306/how-to-install-scipy-with-pip ...

  5. 洛谷2860 [USACO06JAN]冗余路径Redundant Paths

    原题链接 题意实际上就是让你添加尽量少的边,使得每个点都在至少一个环上. 显然对于在一个边双连通分量里的点已经满足要求,所以可以用\(tarjan\)找边双并缩点. 对于缩点后的树,先讲下我自己的弱鸡 ...

  6. Oracle VM VirtualBox如何设置网络地址转换NAT

    使用VirtualBox 安装好服务器后,需要设置网络,如果有IP, 则可以直接连接物理网络了, 如果没有,则可以直接使用NAT网络.设置方便快速. 先将虚拟机中的网络设置为自动获取,然后点击Virt ...

  7. PhpStorm 不停地 updating indices

    问题描述: 环境:PhpStorm 框架: Laravel 5.0, php artisan make:test bar.foo 之后,PhpStorm 一直不停地 Updating indices ...

  8. Python之路(第二十三篇) 面向对象初级:静态属性、静态方法、类方法

    一.静态属性 静态属性相当于数据属性. 用@property语法糖装饰器将类的函数属性变成可以不用加括号直接的类似数据属性. 可以封装逻辑,让用户感觉是在调用一个普通的数据属性. 例子 class R ...

  9. python 字典遍历

    dic1={"name":"kxb","age":28}for k,v in dic1.items(): print(k+",,, ...

  10. Maximum Average Subarray II LT644

    Given an array consisting of n integers, find the contiguous subarray whose length is greater than o ...