#include<stdio.h>
#include<algorithm>
#include<cstring>
#include<iostream>const int MAXN = 2e5+10;
int r[MAXN];  // r 数组保存了字符串中的每个元素值,除最后一个元素外,每个元素的值在 1..m 之间,最后一个元素的值为 0
int wa[MAXN], wb[MAXN], wv[MAXN], ws[MAXN];  // 这 4 个数组是后缀数组计算时的临时变量,无实际意义
int sa[MAXN]; //  sa[i] 保存第 i 小的后缀在字符串中的开始下标,i 取值范围为 0..n-1
int cmp(int *r, int a, int b, int l) {return r[a] == r[b] && r[a + l] == r[b + l];
}
void da(int *r, int *sa, int n, int m) {  // n 为字符串的长度,m 为字符最大值int i, j, p, *x = wa, *y = wb;for (i = 0; i < m; ++i) ws[i] = 0;for (i = 0; i < n; ++i) ws[x[i] = r[i]]++;for (i = 1; i < m; ++i) ws[i] += ws[i - 1];for (i = n - 1; i >= 0; --i) sa[--ws[x[i]]] = i;for (j = 1, p = 1; p < n; j *= 2, m = p) {for (p = 0, i = n - j; i < n; ++i) y[p++] = i;for (i = 0; i < n; ++i) if (sa[i] >= j) y[p++] = sa[i] - j;for (i = 0; i < n; ++i) wv[i] = x[y[i]];for (i = 0; i < m; ++i) ws[i] = 0;for (i = 0; i < n; ++i) ws[wv[i]]++;for (i = 1; i < m; ++i) ws[i] += ws[i - 1];for (i = n - 1; i >= 0; --i) sa[--ws[wv[i]]] = y[i];for (std::swap(x, y), p = 1, x[sa[0]] = 0, i = 1; i < n; ++i)x[sa[i]] = cmp(y, sa[i - 1], sa[i], j) ? p - 1 : p++;}return;
}int rank[MAXN];  // rank[i] 表示从下标 i 开始的后缀的排名,值为 1..n
int height[MAXN]; // 下标范围为 1..n,height[1] = 0
void calHeight(int *r, int *sa, int n) {int i, j, k = 0;for (i = 1; i <= n; ++i)rank[sa[i]] = i;for (i = 0; i < n; height[rank[i++]] = k)for (k ? k-- : 0, j = sa[rank[i] - 1]; r[i + k] == r[j + k]; ++k);return;
}char str[MAXN];
char str2[MAXN];int main(){scanf("%s%s",str,str2);int len1=strlen(str);int len2=strlen(str2);str[len1]='$';str[len1+1]='\0';strcat(str,str2);int n=len1+len2+1;for(int i=0;i<=n;i++){r[i]=str[i];}//printf("%s",str);da(r,sa,n+1,128);calHeight(r,sa,n);int ans=0;for(int i=1;i<=n;i++){if((sa[i]<len1)!=(sa[i-1]<len1)){ans=std::max(ans,height[i]);}}printf("%d\n",ans);return 0;
}

计蒜客 抄袭检测 (最长公共子串)相关推荐

  1. 牛客题霸 [最长公共子串]C++题解/答案

    牛客题霸 [最长公共子串]C++题解/答案 题目描述 给定两个字符串str1和str2,输出两个字符串的最长公共子串,如果最长公共子串为空,输出-1 题解: lcs模板 代码: class Solut ...

  2. [计蒜客][字符串]最长的名字

    题目来源 计蒜客程序设计竞赛基础课(蓝桥杯省赛) 算法标签 字符串 题目描述 思路 更新最长 把字符串都放数组里,看谁长度和最大值一致就拿出来 AC代码 #include<iostream> ...

  3. 计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...

    在人才招聘领域存在这样一个怪圈,高校每年都说是最难就业年.人才过剩,而对于企业HR来说永远都招不到称心如意的人才.这个怪圈在"计蒜客"创始人俞昊然看来,主要是因为当今高校的教学资源 ...

  4. 计蒜客 T1853:非常男女(前缀和)

    上一篇博客计蒜客 T1101:大整数的因子(高精度除法详解)  写在前面:大家好!我是ACfun,我的昵称来自两个单词Accepted和fun.我是一个热爱ACM的蒟蒻.这篇博客来记录一下计蒜客T18 ...

  5. 计蒜客题解——T1214:鸣人和佐助

    题目相关 题目链接 计蒜客 OJ,https://nanti.jisuanke.com/t/T1214. 题目描述 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到 ...

  6. 计蒜客题解——T1213:拯救行动

    题目相关 题目链接 计蒜客 OJ,https://nanti.jisuanke.com/t/T1213. 题目描述 公主被恶人抓走,被关押在牢房的某个地方.牢房用 N×M(N,M≤200) 的矩阵来表 ...

  7. 计蒜客题解——T1769:最大岛屿

    题目相关 题目链接 计蒜客,https://nanti.jisuanke.com/t/T1405. 我的OJ,http://47.110.135.197/problem.php?id=5254. 题目 ...

  8. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析

    新手,欢迎交流,剩下D题不知如何下手,望大佬指教. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:计算周长 B. 结果填空:七巧板 C. 结果填空:苹果 ...

  9. 计蒜客 T1895切蛋糕(单调队列)

    题目:传送阵 思路: 分析题目,简单的说这个题目求的就是最大不定长子段和,那么首先对于最大不定长子段和,我们肯定要首先预处理前缀和数组,然后首先朴素的想, 对于以第i个元素结尾的子段,最大的子段和re ...

最新文章

  1. three.js(六) 地形法向量生成
  2. jstl 获取 javascript 定义的变量_一个后端开发者前端语言基础:JavaScript
  3. 编程方法课程学习心得
  4. iOS使用AVCaptureSession自定义相机
  5. 第4章-无人车UGV模型分析
  6. 50个不上你网站的理由
  7. 工艺仿真软件_中科院科研项目:算法与软件工程集成电路制造中的工艺仿真
  8. 《算法图解》——二分查找
  9. Git最基本入门,只是个感想总结啊啊啊不要搜到我0.0
  10. java不显示图片_java图片显示不出来应该如何解决
  11. 卡方检验结果表格中出现非常多个卡方值和P值的原理和实现步骤
  12. php设置pdf下载加密文件,怎么解除pdf加密 被加密的pdf文件
  13. 如何在google隐藏页面_如何在Google文档中隐藏或删除评论
  14. 使用Incapsula免费CDN加速godaddy空间
  15. 关于Oracle SQL中系统时间和库里数据时间的比较
  16. js 里奇数的判断条件
  17. Kafka中zookeeper的作用详解(7点)
  18. 单位计算机网络管理员论文,计算机专业毕业论文(计算机网络管理软件的研究)教案.doc...
  19. CEP的一个简单理解
  20. [立创传智黑马程序员CSDN]训练营——仿生机械狗

热门文章

  1. 书籍集锦——关于深度学习
  2. JavaEE-网络编程
  3. python turtle画熊猫人_使用Python的turtle画小猪乔治
  4. php获取访问者qq,利用iframe技巧获取访问者qq
  5. erwin Data Modeler 如何连接 Oracle
  6. IDEA Java项目Web页面的中文乱码解决方案
  7. idea项目使用tomcat运行乱码问题(全部解决,亲测有效)
  8. linux磁盘分区fdisk命令详解及云硬盘挂载实操
  9. springmvc web网站开发上传视频到远程服务器解决方案
  10. php淘宝接口API查询手机号归属地 __GetZoneResult_