题目大意:求两个字符串的公共子串。

分析:

模板题,将两个字符串接起来用不会出现的字符分割,然后求分属两个字符串的相邻后缀lcp的最大值即可。

代码:

program work;
typearr=array[0..20001]of longint;
varsa,rank,b,tmp,lcp:arr;n,i,m,l,u,ans,t:longint;s,s1,s2:ansistring;ch:char;
function compare(i,j,k:longint):longint;
var ri,rj:longint;
beginif rank[i]<>rank[j] then exit(ord(rank[i]<rank[j]))elsebeginif i+k<=n then ri:=rank[i+k] else ri:=-1;if j+k<=n then rj:=rank[j+k] else rj:=-1;exit(ord(ri<rj));end;
end;
procedure qsort(l,h,k:longint; var a:arr);
var i,j,t,m:longint;
begin i:=l; j:=h;m:=a[(i+j) div 2];repeat
while compare(a[i],m,k)=1 do inc(i);
while compare(m,a[j],k)=1 do dec(j);
if i<=j thenbegin   t:=a[i]; a[i]:=a[j]; a[j]:=t;
inc(i); dec(j);  end;  until i>j;if i<h then qsort(i,h,k,a); if j>l then qsort(l,j,k,a);  end;
procedure work_sa(s:ansistring; var sa:arr);
var k,i:longint;
beginfor i:=1 to n do begin sa[i]:=i;  rank[i]:=ord(s[i]); end;k:=1;while k<=n dobeginqsort(1,n,k,sa);tmp[sa[1]]:=1;for i:=2 to n dotmp[sa[i]]:=tmp[sa[i-1]]+compare(sa[i-1],sa[i],k);rank:=tmp;k:=k*2;end;
end;
function max(x,y:longint):longint;
beginif x>y then max:=x else max:=y;
end;
procedure work_lcp(s:ansistring;var sa,lcp:arr);
var i,j,h:longint;
beginfor i:=1 to n do rank[sa[i]]:=i;h:=0; lcp[1]:=0; sa[0]:=0;rank[0]:=0;for i:=1 to n dobeginj:=sa[rank[i]-1];if h>0 then dec(h);while (i+h<=n)and(j+h<=n) dobeginif s[i+h]<>s[j+h] then break; inc(h);end;lcp[rank[i]-1]:=h;end;
end;
beginreadln(u);for l:=1 to u dobeginreadln(s1); readln(s2);s:=s1+'@'+s2;t:=length(s1);n:=length(s); work_sa(s,sa);work_lcp(s,sa,lcp); ans:=0;for i:=1 to n-1 do beginif ((sa[i]<=t)and(sa[i+1]>=t+2))or((sa[i+1]<=t)and(sa[i]>=t+2)) then ans:=max(ans,lcp[i]);end;writeln('Nejdelsi spolecny retezec ma delku ',ans,'.');end;
end.

View Code

转载于:https://www.cnblogs.com/qtyytq/p/5508405.html

POJ 2217:Secretary(后缀数组)相关推荐

  1. POJ 2217 Secretary (后缀数组)

    原题链接 Problem Description The basic condition of success of a political party, it is the good Electio ...

  2. POJ 2217 Secretary (后缀数组,挑战程序)

    题目意思: 给出两个字符串,要求两个字符串最长的公共子串(是子串不是子序列) 挑战程序设计竞赛, 383 页 本题要点: 1.高度数组,lcp[i] 表示后缀数组中,第i个字符串 S[sa[i] -] ...

  3. POJ - 3581 Sequence(后缀数组)

    题目链接:点击查看 题目大意:给出一个数列,保证第一个数一定大于其余的所有数,现在需要让我们将其分为连续的三段,每一段独立反转后保证字典序最小,题目要求输出反转后字典序最小的数列 题目分析:因为第一个 ...

  4. POJ 3581 Sequence ——后缀数组 最小表示法

    [题目分析] 一见到题目,就有了一个显而易见obviously的想法.只需要每次找到倒过来最小的那一个字符串翻转就可以了. 然而事情并不是这样的,比如说505023这样一个字符串,如果翻转了成为320 ...

  5. POJ 3415 (后缀数组)

    被虐残了T_T.开始没思路,膜拜大牛的思路又看不懂...推荐一个题解:http://hi.baidu.com/fpkelejggfbfimd/item/5c76cfcba28fba26e90f2ea6 ...

  6. POJ - 1226 Substrings(后缀数组+二分)

    题目链接:点击查看 题目大意:给出n个字符串,求出n个字符串中或者在他们翻转过来的字符串中,出现的最长公共子串的长度 题目分析:说白了就是求n个字符串中的最长公共子串的变形,而这个变形也相当简单,只是 ...

  7. Musical Theme POJ - 1743(后缀数组+二分)

    求不可重叠最长重复子串 对于height[i]定义为sa[i]和 sa[i-1]的最长公共前缀 这个最长公共前缀的值肯定是最大的 证明: 设rank[j] < rank[k], 则不难证明后缀j ...

  8. poj 3261 后缀数组 找反复出现k次的子串(子串能够重叠)

    题目:http://poj.org/problem?id=3261 仍然是后缀数组的典型应用----后缀数组+lcp+二分 做的蛮顺的,1A 可是大部分时间是在调试代码.由于模板的全局变量用混了,而自 ...

  9. poj 3261 Milk Patterns 后缀数组 最长重复子串

    http://poj.org/problem?id=3261 给一串数组,数组最少含有k个相同子串,可重叠,求这样子串的最长长度. 后缀数组求出 height[],若连续k个height[]都大于mi ...

  10. POJ 1743 (后缀数组+不重叠最长重复子串)

    题目链接: http://poj.org/problem?id=1743 题目大意:楼教主の男人八题orz.一篇钢琴谱,每个旋律的值都在1~88以内.琴谱的某段会变调,也就是说某段的数可以加减一个旋律 ...

最新文章

  1. 在springcacheinvokecontext中没找到field_家庭中没入住多久玻璃胶就发黑发霉,终于找到它的原因了,很简单...
  2. php和python web开发-php与python谁更适合web开发?为什么?
  3. 计算器初步添加消息响应
  4. 2、MySQL使用(DISTINCT)过滤重复数据
  5. 手机linux系统指令大全,Linux系统指令大全
  6. 大数据技术基础_【基础】大数据技术栈介绍
  7. java时间比较_广州java培训大概多久时间可以毕业
  8. Html img 标签
  9. 【EPS精品教程】基于DOM和DSM创建垂直模型、加载垂直模型
  10. 如何进行有效的沟通----日常沟通及会议
  11. qq农场 html5,腾讯客服-QQ农场/牧场-QQ农场打不开该怎么解决?
  12. OAuth 2.0系列教程(八) 授权码授权
  13. cli dll打包 vue_vue-cli3使用 DllPlugin 实现预编译提升构建速度
  14. 网卡流量监控工具vnstat的使用
  15. STP状态切换详述(Cisco实现)
  16. 《Using OpenRefine》翻译~8
  17. 多场景业务实战 --用户评论文本挖掘(写的有点细有点多)
  18. Android Dialog设置宽度显示不正常的问题(自定义设置Dialog的宽高)
  19. LeetCode | 0665. Non-decreasing Array非递减数列【Python】
  20. AlexeyAB中训练命令行中 -map 以及 -dont_show

热门文章

  1. 获取远程文章内容时,显示图片的两种方式
  2. 解决远程连接mysql很慢的问题(mysql_connect 打开连接慢)
  3. NHibernateLinq简单的CRUD操作
  4. 你可以去学python_你是怎么学好Python的?
  5. 【Groovy】集合遍历 ( 使用集合的 find 方法查找集合元素 | 闭包中使用 == 作为查找匹配条件 | 闭包中使用 is 作为查找匹配条件 | 闭包使用 true 作为条件 | 代码示例 )
  6. 【EventBus】EventBus 源码解析 ( 事件发送 | postToSubscription 方法 | EventBus 线程模式处理细节 )
  7. 【Flutter】shared_preferences 本地存储 ( 简介 | 安装 shared_preferences 插件 | 使用 shared_preferences 流程 )
  8. 【OpenGL】三、Visual Studio 2019 配置 GitHub ( 将项目上传到 GitHub )
  9. 【计算理论】计算复杂性 ( coNP 问题 | coNP 完全 | P、NP、coNP 相互关系 )
  10. 【Flutter】Dart 数据类型 字符串类型 ( 字符串定义 | 字符串拼接 | 字符串 API 调用 )