POJ 2774 Long Long Message 后缀数组模板题
题意
给定字符串A、B,求其最长公共子串
后缀数组模板题,求出height数组,判断sa[i]与sa[i-1]是否分属字符串A、B,统计答案即可。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream> using namespace std; const int maxn = ;
char str[maxn];
int num[maxn];
int wa[maxn], wb[maxn], wv[maxn], sum[maxn];
int rank[maxn], sa[maxn], height[maxn]; bool 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)
{
int *x = wa, *y = wb, *t;
for (int i = ; i <= m; ++i)
sum[i] = ;
for (int i = ; i <= n; ++i)
sum[x[i]=r[i]] ++;
for (int i = ; i <= m; ++i)
sum[i] += sum[i-];
for (int i = n; i >= ; --i)
sa[sum[x[i]]--] = i;
for (int i, j = , p = ; p < n; j *= , m = p)
{
for (p = , i = n-j+; i <= n; ++i)
y[++p] = i;
for (i = ; i <= n; ++i)
if (sa[i]-j >= )
y[++p] = sa[i]-j;
for (i = ; i <= n; ++i)
wv[i] = x[y[i]];
for (i = ; i <= m; ++i)
sum[i] = ;
for (i = ; i <= n; ++i)
sum[wv[i]] ++;
for (i = ; i <= m; ++i)
sum[i] += sum[i-];
for (i = n; i >= ; --i)
sa[sum[wv[i]]--] = y[i];
for (t = x, x = y, y = t, p = , x[sa[]] = , i = ; i <= n; ++i)
x[sa[i]] = cmp(y, sa[i], sa[i-], j) ? p : ++p;
}/*
for (int i = 1; i <= n; ++i)
printf("%d ", sa[i]);
printf("\n");*/
} void calheight(int *r, int *sa, int n)
{
for (int i = ; i <= n; ++i)
rank[sa[i]] = i;/*
for (int i = 1; i <= n; ++i)
printf("%d ", rank[i]);
printf("\n");*/
int k = ;
for (int i = ; i <= n; ++i)
{
if (k > )
k --;
int j = sa[rank[i]-];
while (r[i+k] == r[j+k] && i+k <= n && j+k <= n)
k ++;
height[rank[i]] = k;
}
} int main()
{
scanf("%s", str);
int l1 = strlen(str);
for (int i = ; i <= l1; ++i)
num[i] = str[i-]-'a'+;
num[l1+] = ;
scanf("%s", str);
int l2 = strlen(str);
for (int i = ; i <= l2; ++i)
num[l1++i] = str[i-]-'a'+;
da(num, sa, l1+l2+, );
calheight(num, sa, l1+l2+);
int ans = ;
for (int i = ; i <= l1+l2+; ++i)
if ((sa[i] <= l1 && sa[i-] >= l1+)
|| (sa[i-] <= l1 && sa[i] >= l1+))
ans = max(ans, height[i]);
printf("%d\n", ans);
return ;
}
POJ 2774 Long Long Message 后缀数组模板题的更多相关文章
- poj 2774 Long Long Message 后缀数组基础题
Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 24756 Accepted: 10130 Case Time Limi ...
- POJ - 2774 Long Long Message (后缀数组/后缀自动机模板题)
后缀数组: #include<cstdio> #include<algorithm> #include<cstring> #include<vector> ...
- POJ 2774 Long Long Message 后缀数组
Long Long Message Description The little cat is majoring in physics in the capital of Byterland. A ...
- poj 2774 Long Long Message 后缀数组LCP理解
题目链接 题意:给两个长度不超过1e5的字符串,问两个字符串的连续公共子串最大长度为多少? 思路:两个字符串连接之后直接后缀数组+LCP,在height中找出max同时满足一左一右即可: #inclu ...
- POJ 2774 Long Long Message (后缀数组+二分)
题目大意:求两个字符串的最长公共子串长度 把两个串接在一起,中间放一个#,然后求出height 接下来还是老套路,二分出一个答案ans,然后去验证,如果有连续几个位置的h[i]>=ans,且存在 ...
- POJ 2774 Long Long Message ——后缀数组
[题目分析] 用height数组RMQ的性质去求最长的公共子串. 要求sa[i]和sa[i-1]必须在两个串中,然后取height的MAX. 利用中间的字符来连接两个字符串的思想很巧妙,记得最后还需要 ...
- BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题
BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题 将字符串复制一遍接在原串后面,然后后缀排序即可. #include <cmath> #include &l ...
- 后缀数组(模板题) - 求最长公共子串 - poj 2774 Long Long Message
Language: Default Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 21 ...
- POJ2774 & 后缀数组模板题
题意: 求两个字符串的LCP SOL: 模板题.连一起搞一搞就好了...主要是记录一下做(sha)题(bi)过程心(cao)得(dan)体(xin)会(qing) 后缀数组概念...还算是简单的,过程 ...
随机推荐
- js_网页导出pdf文件
打印当前页面,一开始我认为是需要输出pdf的,后来了解的需求是能够打印就可以了.需求既然都研究了,记录下. 更好的打印方式,window.print();会弹出打印对话框,打印的是window.doc ...
- 大数加法(SDUT“斐波那契”串)4335
题目链接:https://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/2697/pid/4335.ht ...
- (2)剑指Offer之二维数组查找和替换空格问题
一 二维数组查找 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 问 ...
- SVM问题再理解与分析——我的角度
SVM问题再理解与分析--我的角度 欢迎关注我的博客:http://www.cnblogs.com/xujianqing/ 支持向量机问题 问题先按照几何间隔最大化的原则引出他的问题为 上面的约束条件 ...
- 自组织神经网络介绍:自组织特征映射SOM(Self-organizing feature Map),第三部分
前面两篇介绍了SOM的基本概念和算法,第一部分,第二部分,本篇具体展开一下应用中的一些trick设定. SOM设计细节 输出层设计 输出层神经元数量设定和训练集样本的类别数相关,但是实际中我们往往不能 ...
- Linux下的格式化字符串漏洞利用姿势
linux最早的漏洞防护机制nx-stack刚刚出现后就有人想出了突破方法.那就是只有栈是不可执行,而除了栈以外的其他地方还是可以执行的,只要把返回地址执行别的地方就可以. 一.格式化字符串漏洞 格式 ...
- csv 文件乱码问题
问题背景: Pandas.DataFrame 数据结构df在调用df.to_csv()方法生成csv文件格式的字符串(调用df.to_csv('test.csv')直接生成文件也有这个问题)作为字符串 ...
- Linux平台上SQLite数据库教程(一)——终端使用篇
https://blog.csdn.net/u011192270/article/details/48031763 https://blog.csdn.net/fml1997/article/deta ...
- git团队开发
用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景.嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交流. git设置关闭自动换行 git config ...
- [BZOJ4945][Noi2017]游戏 2-sat
对于所有的x,我们枚举他的地图类型,事实上我们只需要枚举前两种地形就可以覆盖所有的情况. 之后就变成了裸的2-sat问题. 对于一个限制,我们分类讨论: 1.h[u]不可选,跳过 2.h[v]不可选, ...