Poj1743 (后缀数组)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int ws[],wa[],wb[],sa[],x[],y[],h[],wv[],a[],b[],rank[];
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)
{
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(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++)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++;
}
}
void calheight(int n)
{
int i,j,k=;
memset(rank,,sizeof(rank));
for(i=;i<n;i++)rank[sa[i]]=i;
for(i=;i<n;h[rank[i++]]=k)
for(k?k--:,j=sa[rank[i]-];b[i+k]==b[j+k];)
k++;
}
int solve(int o,int n)
{
int min,max,i;
max=-0x7fffffff;
min=0x7fffffff;
for(i=;i<=n;i++)
{
if(h[i]>=o)
{
if(sa[i]>max)max=sa[i];
if(sa[i]<min)min=sa[i];
if(max-min>=o)return ;
}
else
{
max=-0x7fffffff;
min=0x7fffffff;
if(sa[i]>max)max=sa[i];
if(sa[i]<min)min=sa[i];
}
}
if(max-min>=o)return ;
return ;
}
void ef(int low,int high,int n)
{
int mid;
while(low<high-)
{
mid=(low+high)/;
if(solve(mid,n)==)
{
low=mid;
}
else
{
high=mid;
}
}
if(low<)printf("0\n");
else printf("%d\n",low+);
}
int main()
{ int n,i,max,min;
while()
{
memset(ws,,sizeof(ws));
memset(wa,,sizeof(wa));
memset(wb,,sizeof(wb));
memset(sa,,sizeof(sa));
memset(h,,sizeof(h));
memset(wv,,sizeof(wv));
scanf("%d",&n);
if(n==)break;
for(i=;i<=n;i++)scanf("%d",&a[i]);
if(n<)
{
printf("0\n");
continue;
}
if(n==)
{
printf("0\n");
continue;
}
for(i=;i<=n-;i++)b[i-]=a[i+]-a[i]+;
b[n-]=;
n--;
max=-0x7fffffff;
min=0x7fffffff;
DA(b,sa,n+,);
calheight(n+);
max=-0x7fffffff;
min=0x7fffffff;
for(i=;i<n;i++)
{
if(h[i]>max)max=h[i];
if(h[i]<min)min=h[i];
}
ef(,n,n);
}
return ;
}
Poj1743 (后缀数组)的更多相关文章
- [Poj1743] [后缀数组论文例题] Musical Theme [后缀数组不可重叠最长重复子串]
利用后缀数组,先对读入整数处理str[i]=str[i+1]-str[i]+90这样可以避免负数,计算Height数组,二分答案,如果某处H<lim则将H数组分开,最终分成若干块,判断每块中是否 ...
- poj1743 后缀数组求不可重叠的重复出现的子串最长长度
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 25348 Accepted: 8546 De ...
- Musical Theme poj1743(后缀数组)
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 16757 Accepted: 5739 De ...
- poj1743 后缀数组, poj挂了 存个代码
#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk mak ...
- 【POJ1743】Musical Theme(后缀数组)
[POJ1743]Musical Theme(后缀数组) 题面 洛谷,这题是弱化版的,\(O(n^2)dp\)能过 hihoCoder 有一点点区别 POJ 多组数据 题解 要求的是最长不可重叠重复子 ...
- poj1743(后缀数组)
poj1743 题意 给出一个数字序列(串),现在要去寻找一个满足下列条件的子串: 长度不小于 5 存在重复的子串(如果把一个子串的所有数字都加上或减去一个值,与另一子串的数字对应相同,我们称它们重复 ...
- POJ1743 Musical Theme —— 后缀数组 重复出现且不重叠的最长子串
题目链接:https://vjudge.net/problem/POJ-1743 Musical Theme Time Limit: 1000MS Memory Limit: 30000K Tot ...
- P2743(poj1743) Musical Themes[差分+后缀数组]
P2743 乐曲主题Musical Themes(poj1743) 然后呢这题思路其实还是蛮简单的,只是细节特别多比较恶心,忘记了差分带来的若干疏漏.因为转调的话要保证找到相同主题,只要保证一段内相对 ...
- POJ1743 Musical Theme 最长重复子串 利用后缀数组
POJ1743 题目意思是求不重叠的最长相同变化的子串,输出该长度 比如1 2 3 4 5 6 7 8 9 10,最长长度为5,因为子串1 2 3 4 5 和 6 7 8 9 10变化都一样的 思路: ...
随机推荐
- 【leetcode❤python】 303. Range Sum Query - Immutable
#-*- coding: UTF-8 -*- #Tags:dynamic programming,sumRange(i,j)=sum(j)-sum(i-1)class NumArray(object) ...
- Using GET_APPLICATION_PROPERTY in Oracle D2k Forms
Using GET_APPLICATION_PROPERTY in Oracle D2k Forms DescriptionReturns information about the current ...
- provider 设计模式
相关介绍文章: Provider Model Design Pattern and Specification, Part 1 (old but detailed). The ASP.NET 2.0 ...
- php : 基础(6)
数组 数组基础 含义: 数组就是一系列数据的集合体,他们按设定的顺序排列为一个"链的形状". 注意:php中的数组单元的顺序,跟下标无关! 数组定义(赋值): $arr1 = ar ...
- 【学习笔记】在原生javascript中使用ActiveX和插件
什么是插件 现在的浏览器提供了大量的内置功能,但仍然有一些工作无法完成,如播放音频和视频.插件及其扩展浏览器功能就尤为重要. 插件是可下载的应用程序,可以插入到浏览器中,现在有很多不同的插件,常用的有 ...
- 关于近期项目代码整理(iOS)
近期对项目中所经常使用到的封装代码进行整理,并将其上传至网络保存,本人会在后期不间断的更新其内容.具体链接地址为代码封装 关于代码 这些代码为从学习iOS来到现在实际项目开发中,精炼出来的封装代码,使 ...
- win7配置ftp服务
1.首先开启ftp服务 2.配置ftp站点 3.让ftp服务器通过防火墙 4.编辑ftp访问权限,使用户能通过账号密码访问ftp,当然,在此之前,需要创建一个新的用户 到此,就可以远程访问ftp了
- <mvc:annotation-driven/>与<context:annotation-config/>的区别
在使用注解的方式配置SSM的时候一般会配置<mvc:annotation-driven/>与<context:annotation-config/>,有时候会对两者的概念有些区 ...
- Exit code from container executor initialization is : 24 ExitCodeException exitCode=24: Configuration file ../etc/hadoop/container-executor.cfg not found.
/etc/hadoop/conf的软链接(/etc/hdfs/conf)不正确,应该是/etc/yarn/conf
- usb中的传输模式
别人总结的一个usb传输模式,保存一下 usb中的endpoint(端点)和传输模式 端点: 端点位于USB 外设内部,所有通信数据的来源或目的都基于这些端点,是一个可寻址的FIFO. 每个USB 外 ...