思路

后缀数组的水题
把两个字符串拼起来,找到最大的height满足sa[i-1]和sa[i]不在同一子串中即可

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN = 100100*2;
struct Node{int pos,r[2];
}x[MAXN],midx[MAXN];
int barrel[MAXN],ranks[MAXN],sa[MAXN],height[MAXN],n,lena,lenb;
char s[MAXN],t[MAXN];
int c_sort(int n,int lim){for(int i=0;i<2;i++){memset(barrel,0,sizeof(barrel));for(int j=1;j<=n;j++)barrel[x[j].r[i]]++;for(int j=1;j<=lim;j++)barrel[j]+=barrel[j-1];for(int j=n;j>=1;j--)midx[barrel[x[j].r[i]]--]=x[j];for(int j=1;j<=n;j++)x[j]=midx[j];}int cnt=1;ranks[x[1].pos]=1;for(int i=2;i<=n;i++)if(x[i].r[0]==x[i-1].r[0]&&x[i].r[1]==x[i-1].r[1])ranks[x[i].pos]=cnt;elseranks[x[i].pos]=++cnt;return cnt;
}
void cal_sa(int n){for(int i=1;i<=n;i++)x[i]=(Node){i,s[i],0};int cnt=c_sort(n,2000);for(int i=1;cnt<n;i<<=1){for(int j=1;j<=n;j++)x[j]=(Node){j,(i+j<=n)?ranks[i+j]:0,ranks[j]};cnt=c_sort(n,cnt);}for(int j=1;j<=n;j++)sa[ranks[j]]=j;for(int i=1,j=0,k;i<=n;height[ranks[i++]]=j)for(j?j--:0,k=sa[ranks[i]-1];s[i+j]==s[j+k];j++);
}
int main(){scanf("%s",t+1);lena=strlen(t+1);for(int i=1;i<=lena;i++)s[i]=t[i];n+=lena;s[++n]='#';scanf("%s",t+1);lenb=strlen(t+1);for(int i=1;i<=lenb;i++)s[n+i]=t[i];n+=lenb;cal_sa(n);int ans=0;for(int i=2;i<=n;i++){if((sa[i-1]<=lena&&sa[i]>lena+1)||(sa[i-1]>lena+1&&sa[i]<=lena))ans=max(ans,height[i]);}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/dreagonm/p/10480513.html

POJ2774 Long Long Message相关推荐

  1. 后缀数组(未完待续)

    后缀数组 简介 后缀数组(Suffix Array, SA)是一种在字符串问题中很实用的工具,其主要作用是求多模板匹配和最长公共前缀(LCP).与 AC自动机 预先处理模板串不同,后缀数组在进行多模板 ...

  2. 【后缀数组】【poj2774】【 Long Long Message】

    题意: 求两个串的最长连续子串. 我的想法: 枚举第二个串...在第一个串的后缀数组中二分查找. 复杂度NlogN.最坏情况N^2 题解: (3)height 数组:定义height[i]=suffi ...

  3. 【POJ2774】Long Long Message,第一次的后缀数组

    Time:2016.05.21 Author:xiaoyimi 转载注明出处谢谢 传送门 思路:没什么值得说的,大家想看思路的话还是去看大牛们的吧,磨了将近一天的后缀数组,基本按照模板打得,最后发现有 ...

  4. 规范的 Commit Message

    在 Angular 规范中,Commit Message 包含三个部分,分别是 Header.Body 和 Footer,格式如下: <type>[optional scope]: < ...

  5. Setting the Reply-To Header in an Email using CDONTS.NewMail Object and CDO Message

    代码  1 <%  2 Option Explicit  3   4 Dim objMail  5 Dim strSubject  6 Dim strBody  7   8 strSubject ...

  6. EMQ学习笔记---Clean Session和Retained Message

    MQTT会话(Clean Session) MQTT客户端向服务器发起CONNECT请求时,可以通过'Clean Session'标志设置会话. 'Clean Session'设置为0,表示创建一个持 ...

  7. Message、Handler、Message Queue、Looper之间的关系

    2019独角兽企业重金招聘Python工程师标准>>> 在单线程模型下,为了解决线程通信问题,Android设计了一个通信机制.Message Queue(消息队列), 线程间的通信 ...

  8. CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法...

    CAS (10) -- JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法 jboss版本: jb ...

  9. 使用alterMIME实现添加message footer功能

    1. 安装alterMIME   tar zxvf altermime-0.3.8.tar.gz   cd altermin3-0.3.8   make   make install   alterm ...

最新文章

  1. dlib人脸比对算法代码java,Python 使用dlib 5行代码实现人脸比对
  2. 用VSCode写python的正确姿势
  3. 英语语法最终珍藏版笔记-3几个常用时态的比较
  4. leetcode-6-Z 字形变换
  5. js 操作java对象_JavaScript 对象基础
  6. EasyExcel导入的时候报错Caused by: java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/File
  7. 【秒懂】号称最为简明实用的Django上手教程
  8. 为什么python 为什么没有接口_python没有接口吗
  9. 本科是最底层?学历真的那么重要么?
  10. 梯度下降-单变量线性回归-理论+代码+解释
  11. python控制电脑唤醒_python socket发送魔法包网络唤醒开机.py
  12. 20191222每日一句
  13. 用grub4dos制作U盘启动盘winpe+红叶dos+maxdos+veket+linuxmint
  14. iOS越狱之Mac登录iPhone
  15. 计算机维护与维修毕业论文,计算机维修与维护毕业论文.doc
  16. 视频直播画质核心影响因素分析:分辨率、帧率和码率
  17. python批量下载微博贴评论图片
  18. http状态码查询表(转载)
  19. Keras中使用如Leaky ReLU等高级激活函数的方法
  20. 指数和个股的对数收益率正态性检验

热门文章

  1. Error detection in Knowledge Graphs: Path Ranking, Embeddings or both?-学习笔记
  2. vue3 数据双向绑定demo
  3. Vue项目目录结构注解附assets与static目录的区别
  4. 数据库同样数据,本地和服务器查询效率相差百倍
  5. Ubuntu: ldconfig(解决*.so不是符号连接)
  6. mysql的分库分表
  7. 2016-04-25-信息系统实践手记5-CACHE设计一例
  8. 调试技巧--Windows端口号是否被占用
  9. graph driver-device mapper-04libdevmapper基本操作
  10. js原生代码编写一个鼠标在页面移动坐标的检测功能,兼容各大浏览器