cogs1713 [POJ2774]很长的信息


原题链接


题解

把两串拼成A+'%'+B+'$'。跑后缀数组然后相邻两点i,i+1不在同一串里就用ht[i]更新答案。

好裸。。。


Code

// It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<cstring>
#define Fname "lcs"
using namespace std;
#define rep(a,b,c) for(rg int a=b;a<=c;a++)
#define drep(a,b,c) for(rg int a=b;a>=c;a--)
#define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0;rg char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x;
}
const int maxn=1200010;
char A[maxn],B[maxn];
int a,b;
int n,s[maxn],m;
int sa[maxn],rk[maxn],tmp[maxn],buc[maxn],ht[maxn];
il vd Qsort(){
rep(i,0,m)buc[i]=0;
rep(i,1,n)buc[rk[tmp[i]]]++;
rep(i,1,m)buc[i]+=buc[i-1];
drep(i,n,1)sa[buc[rk[tmp[i]]]--]=tmp[i];
}
il bool cmp(int*h,int a,int b,int l){return h[a]==h[b]&&h[a+l]==h[b+l];}
il vd solve(){
m=127;
rep(i,1,n)rk[i]=s[i],tmp[i]=i;
Qsort();
int p=0;
for(rg int l=1;p<n;l<<=1){
p=0;
rep(i,n-l+1,n)tmp[++p]=i;
rep(i,1,n)if(sa[i]>l)tmp[++p]=sa[i]-l;
Qsort();
rep(i,1,n)tmp[i]=rk[i];
p=rk[sa[1]]=1;
rep(i,2,n)
if(cmp(tmp,sa[i],sa[i-1],l))rk[sa[i]]=p;
else rk[sa[i]]=++p;
m=p;
}
p=0;
rep(i,1,n)sa[rk[i]]=i;
rep(i,1,n){
if(p)--p;
if(rk[i]==n)continue;
while(s[i+p]==s[sa[rk[i]+1]+p])++p;
ht[rk[i]]=p;
}
}
il bool check(int&x,int&y){
if(x<=a&&y>a+1)return 1;
if(y<=a&&x>a+1)return 1;
return 0;
}
int main(){
freopen(Fname".in","r",stdin);
freopen(Fname".out","w",stdout);
scanf("%s%s",A+1,B+1);
a=strlen(A+1),b=strlen(B+1);
rep(i,1,a)s[++n]=A[i];
s[++n]='%';
rep(i,1,b)s[++n]=B[i];
s[n+1]='$';
solve();
int ans=0;
rep(i,1,n-1)if(check(sa[i],sa[i+1]))ans=max(ans,ht[i]);
printf("%d\n",ans);
return 0;
}

cogs1713 [POJ2774]很长的信息的更多相关文章

  1. POJ2774 很长的信息

    Description Little cat在Byterland的首都读物理专业.这些天他收到了一条悲伤地信息:他的母亲生病了.担心买火车票花钱太多(Byterland是一个巨大的国家,因此他坐火车回 ...

  2. Springmvc+Hibernate在Eclipse启动Tomcat需要很长时间的解决方法

    最近在学习SpringMvc开发,有一个提问困扰了很久,就是在Eclipse启动Tomcat需要很长时间,大概要1分多钟. 启动日志: 九月 08, 2016 8:59:01 下午 org.apach ...

  3. 【生产问题】记还原一个很小的BAK文件,但却花了很长时间,分析过程

    [生产问题]还原一个很小的BAK文件,但却花了很长时间? 关键词:备份时事务日志太大会发生什么?还原时,事务日志太大会怎么办? 1.前提: [1.1]原库数据已经丢失,只有这个bak了 [1.2]ba ...

  4. elasticsearch的store属性跟_source字段——如果你的文档长度很长,存储了_source,从_source中获取field的代价很大,你可以显式的将某些field的store属性设置为yes,否则设置为no

    转自:http://kangrui.iteye.com/blog/2262860 众所周知_source字段存储的是索引的原始内容,那store属性的设置是为何呢?es为什么要把store的默认取值设 ...

  5. 专访黄勇:Java在未来的很长一段时间仍是主流(把老板当情人,把同事当小孩,把客户当病人)

    url:http://www.csdn.net/article/2015-09-06/2825621 2015-09-06 13:18 摘要:本文采访了现任阿里巴巴公司系统架构师黄勇,从事近十年的Ja ...

  6. mvc中多参数URL会很长,首次加载不传参数让url很短,路由规则实现方法[bubuko.com]

    如要实现列表中地址全路径“bubuko-11-2.html”,在首次进入时,使用短路径“bubuko.html”,只有再次href后才显示全路径“bubuko-11-2.html”,下面使用路由规则来 ...

  7. 为什么drop table的时候要在checking permissions花很长时间?

    昨天,我drop一个表的时候在checking permissions花了20s+,这个时间花在哪里了呢?经常查找发现我的配置文件innodb_file_per_table=1的,innodb需要遍历 ...

  8. java 将长度很长的字符串(巨大字符串超过4000字节)插入oracle的clob字段时会报错的解决方案

    直接很长的字符串插入到clob字段中会报字符过长的异常,相信大家都会碰到这种情况 String sql = "insert into table(request_id,table_name, ...

  9. 【转】android中重复连接ble设备导致的连接后直接返回STATE_DISCONNECTED的解决办法---不错不错,重新连接需要花费很长的时间

    原文网址:http://bbs.eeworld.com.cn/thread-438571-1-1.html /*                         * 通过使用if(gatt==null ...

随机推荐

  1. 【Webpack】学习随笔

    参考链接:http://www.runoob.com/w3cnote/webpack-tutorial.html Webpack 是一个前端资源加载/打包工具. Webpack 可以将多种静态资源 j ...

  2. QTP基本方法2------截取字符串

    1.instr: 返回字符串在另外一个字符串中第一次出现的位置 结构:instr([start],string1,string2[,compare]) start:开始位置,可选参数,默认为1 str ...

  3. Oracle数据库常用命令(持续更新)

    1. 查询当前用户所有的表 select * from user_tables; 2. 查询当前用户能访问的表 select * from all_tables; 3. 获取表字段 select * ...

  4. java 进销存 库存管理 销售报表 商户管理 springmvc SSM crm 项目

    系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3  SSM ...

  5. 排列组合:01转换法之lua实现

    c++ 版连接 https://blog.csdn.net/canguanxihu/article/details/46363375 因为项目用的是lua脚本,看了C++版后自己写了一个lua版本的, ...

  6. 为什么我不再用 .NET 框架(网摘)

    觉得好就拿过来收藏了,保留出处链接-凌风 2017年08月23日 14:51:32 hisense_大致若愚 阅读数:9355 .NET平台很棒.真的很棒.直到它不再那么棒.我为什么不再用.NET?简 ...

  7. MongoDB Linux安装

    MongoDB 提供了 linux 各发行版本 64 位的安装包,你可以在官网下载安装包. 下载地址:https://www.mongodb.com/download-center#community ...

  8. C++的一些关键字用法

    const 这个关键字真是太常用了, 所以干脆总结一下. int const a = 8; //定义一个int常量a, 不能再给a赋值了 const int a = 8; //和上面一样 int co ...

  9. 嵌入式C语言自我修养 10:内联函数探究

    10.1 属性声明:noinline & always_inline 这一节,接着讲 __atttribute__ 属性声明,__atttribute__ 可以说是 GNU C 最大的特色.我 ...

  10. 【python安装】Windows上安装和创建python开发环境

    1. 在 windows10 上安装python开发环境 Linux和Mac OS都自带python环境,但是Windows没有,所以需要自行安装. 第1步:访问 python官网,下载Windows ...