后缀数组 模板题 hdu1403(最长公共(连续)子串)
好气啊,今天没有看懂后缀树和后缀自动机
只能写个后缀数组发泄一下了orz
#include <cstdio>
#include <cstring>
const int N = *;
int wa[N], wb[N], wv[N], ws[N];
int rank[N];
int height[N];
char str[N];
int s[N], sa[N];
int cmp(int *r, int a, int b, int l)
{
return r[a]==r[b] && r[a+l]==r[b+l];
}
void get_sa(int *r, int *sa, int n, int m) //±¶ÔöËã·¨
{
int i,j,p,*x=wa,*y=wb,*t;
for(i=; i<m; i++) ws[i]=;
for(i=; i<n; i++) ws[x[i]=r[i]]++;
for(i=; i<m; i++) ws[i]+=ws[i-];
for(i=n-; i>=; i--) sa[--ws[x[i]]]=i;
for(p=,j=; 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++) ws[i]=;
for(i=; i<n; i++) ws[wv[i]]++;
for(i=; i<m; i++) ws[i]+=ws[i-];
for(i=n-; i>=; i--) sa[--ws[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++;
}
return;
}
void get_height(int *r, int *sa, int n)
{
int i, j, k=;
for(i=; i<=n; i++) rank[sa[i]]=i;
for(i=; i<n; height[rank[i++]]=k)
for(k?k--:,j=sa[rank[i]-]; r[i+k]==r[j+k]; k++);
return;
} int main()
{
while(~scanf("%s",str))
{
int len = strlen(str);
str[len] = '~';
scanf("%s",str+len+);
int LEN = strlen(str);
for(int i = ; i < LEN; i++)
s[i] = str[i]-'a'+;
s[LEN] = ;
get_sa(s,sa,LEN,);
get_height(s,sa,LEN);
int ans = ;
for(int i = ; i < LEN; i++)
ans = (height[i] > ans && ((sa[i-]<len&&sa[i]>len) || (sa[i-]>len&&sa[i]<len))) ? height[i] : ans;
printf("%d\n",ans);
}
return ;
}
后缀数组 模板题 hdu1403(最长公共(连续)子串)的更多相关文章
- 后缀数组(模板题) - 求最长公共子串 - poj 2774 Long Long Message
		
Language: Default Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 21 ...
 - POJ 2774 Long Long Message 后缀数组模板题
		
题意 给定字符串A.B,求其最长公共子串 后缀数组模板题,求出height数组,判断sa[i]与sa[i-1]是否分属字符串A.B,统计答案即可. #include <cstdio> #i ...
 - 利用后缀数组(suffix array)求最长公共子串(longest common substring)
		
摘要:本文讨论了最长公共子串的的相关算法的时间复杂度,然后在后缀数组的基础上提出了一个时间复杂度为o(n^2*logn),空间复杂度为o(n)的算法.该算法虽然不及动态规划和后缀树算法的复杂度低,但其 ...
 - BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题
		
BZOJ 1031 [JSOI2007]字符加密Cipher | 后缀数组模板题 将字符串复制一遍接在原串后面,然后后缀排序即可. #include <cmath> #include &l ...
 - POJ 3261 Milk Patterns ( 后缀数组 && 出现k次最长可重叠子串长度 )
		
题意 : 给出一个长度为 N 的序列,再给出一个 K 要求求出出现了至少 K 次的最长可重叠子串的长度 分析 : 后缀数组套路题,思路是二分长度再对于每一个长度进行判断,判断过程就是对于 Height ...
 - POJ2774 & 后缀数组模板题
		
题意: 求两个字符串的LCP SOL: 模板题.连一起搞一搞就好了...主要是记录一下做(sha)题(bi)过程心(cao)得(dan)体(xin)会(qing) 后缀数组概念...还算是简单的,过程 ...
 - hdu 1403 Longest Common Substring 后缀数组 模板题
		
题目链接 题意 问两个字符串的最长公共子串. 思路 加一个特殊字符然后拼接起来,求得后缀数组与\(height\)数组.扫描一遍即得答案,注意判断起始点是否分别在两个串内. Code #include ...
 - POJ2774 Long Long Message —— 后缀数组 两字符串的最长公共子串
		
题目链接:https://vjudge.net/problem/POJ-2774 Long Long Message Time Limit: 4000MS Memory Limit: 131072 ...
 - [UOJ#35] [UOJ后缀数组模板题] 后缀排序 [后缀数组模板]
		
后缀数组,解决字符串问题的有利工具,本题代码为倍增SA算法 具体解释详见2009年国家集训队论文 #include <iostream> #include <algorithm> ...
 
随机推荐
- Docker(二):Hello World
			
Docker 安装 这里以CentOS7 为例,其他安装教程可以自行通过其他路径了解. Docker 运行在CentOS7 上要求,系统为64位.系统内核版本为3.10以上. Docker 运行在 C ...
 - 一个好用的C# HttpHelper类
			
/// <summary> /// 类说明:HttpHelper类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理 /// 重要提 ...
 - 洛谷 P3952
			
题目描述 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写程序 ...
 - pads怎么高亮网络
			
pads怎么高亮网络 选择完整个网络----再按CTRL+H 就高亮了. 取消高亮是,选择需要取消高亮的整个网络,按 CTRL+U 就取消了. PADS在生成Gerber时过孔盖油设置方法 PADS2 ...
 - 使用C6748和C5509A对nRF24L01驱动进行数据传输
			
1. 写在前面 今天下午做了一个C5509A和C6748两个DSP的数据传输,经由RF24L01设备传输,都是模拟SPI协议,对于两个DSP来说,无非是配GPIO引脚,写好时序和延时.C5509A的G ...
 - mysql根据二进制日志恢复数据/公司事故实战经验
			
根据二进制日志恢复 目的:恢复数据,根据二进制日志将数据恢复到今天任意时刻 增量恢复,回滚恢复 如果有备份好的数据,将备份好的数据导入新数据库时,会随着产生二进制日志 先准备一台初始化的数据库 mys ...
 - Python学习:If 语句与 While 语句
			
If 语句 用以检查条件:如果条件为真(True),将运行这一块的语句(称作 if-block 或 if 块) 则将运行另一块语句(称作 else-block 或 else 块),其中 else ...
 - python 装饰器 (多个装饰器装饰一个函数---装饰器前套一个函数)
			
#带参数的装饰器 #500个函数 # import time # FLAGE = False # def timmer_out(flag): # def timmer(func): # def inn ...
 - Leecode刷题之旅-C语言/python-70爬楼梯
			
/* * @lc app=leetcode.cn id=70 lang=c * * [70] 爬楼梯 * * https://leetcode-cn.com/problems/climbing-sta ...
 - Go搭建一个Web服务器
			
package main import ( "fmt" "net/http" "strings" "log" ) fun ...