poj 1743 Musical Theme【后缀自动机】
不是很神的一道题,一般。
先差分,最后答案需要+1。
一个right集的len即为该right集的最长相同后缀,考虑到不能重复,所以处理一下该right集的最大与最小的ri,最后答案ans=max(ans,min(r[i]-l[i],len[i]))
poj的g++比较恶心,卡空间,卡时间。
用c++交即可。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<iomanip>
#include<set>
#include<map>
#include<queue>
using namespace std;
#define mem1(i,j) memset(i,j,sizeof(i))
#define mem2(i,j) memcpy(i,j,sizeof(i))
#define LL long long
#define up(i,j,n) for(int i=(j);i<=(n);i++)
#define FILE "dealing"
#define poi vec
#define eps 1e-10
#define db double
const int maxn=40005,inf=1000000000,mod=1000000007;
int read(){
int x=0,f=1,ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+ch-'0',ch=getchar();}
return f*x;
}
bool cmax(int& a,int b){return a<b?a=b,true:false;}
bool cmin(int& a,int b){return a>b?a=b,true:false;}
int a[maxn],l[maxn],r[maxn]; int cnt=1,now=1;
int pre[maxn],len[maxn],ct[maxn],sa[maxn],np,p,q,nq;
int c[maxn][180];
void extend(int x){
p=now;np=++cnt;len[np]=len[p]+1;now=np;l[np]=r[np]=len[np];
while(p&&!c[p][x])c[p][x]=np,p=pre[p];
if(!p)pre[np]=1;
else {
q=c[p][x];
if(len[q]==len[p]+1)pre[np]=q;
else {
len[nq=++cnt]=len[p]+1;
mem2(c[nq],c[q]);
pre[nq]=pre[q];
pre[q]=pre[np]=nq;
while(p&&c[p][x]==q)
c[p][x]=nq,p=pre[p];
}
}
}
void getsort(){
mem1(ct,0);mem1(sa,0);
up(i,1,cnt)ct[len[i]]++;
up(i,1,cnt)ct[i]+=ct[i-1];
for(int i=cnt;i>=1;i--)sa[ct[len[i]]--]=i;
}
void clear(){
mem1(pre,0);mem1(len,0);cnt=1,now=1;mem1(c,0);
}
void build(int* s,int n){
clear();
up(i,1,n)
extend(s[i]);
} int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
while(true){
mem1(l,10);mem1(r,0);
int n=read();if(!n)break;
up(i,1,n)a[i]=read();
up(i,1,n-1)a[i]=a[i+1]-a[i]+87;n--;
build(a,n);
getsort();int *t=sa;
for(int i=cnt;i>=1;i--){
r[pre[t[i]]]=max(r[pre[t[i]]],r[t[i]]);
l[pre[t[i]]]=min(l[pre[t[i]]],l[t[i]]);
}
int ans=-1e9;
up(i,2,cnt)ans=max(ans,min(r[i]-l[i],len[i]));
printf("%d\n",ans<4?0:ans+1);
}
return 0;
}
poj 1743 Musical Theme【后缀自动机】的更多相关文章
- poj 1743 Musical Theme 后缀自动机/后缀数组/后缀树
题目大意 直接用了hzwer的题意 题意:有N(1 <= N <=20000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,现在要找一个重复的主题."主题&qu ...
- Poj 1743 Musical Theme (后缀数组+二分)
题目链接: Poj 1743 Musical Theme 题目描述: 给出一串数字(数字区间在[1,88]),要在这串数字中找出一个主题,满足: 1:主题长度大于等于5. 2:主题在文本串中重复出现 ...
- POJ 1743 Musical Theme 后缀数组 最长重复不相交子串
Musical ThemeTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=1743 Description ...
- poj 1743 Musical Theme (后缀数组+二分法)
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 16162 Accepted: 5577 De ...
- Poj 1743 Musical Theme(后缀数组+二分答案)
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 28435 Accepted: 9604 Descri ...
- [poj 1743] Musical Theme 后缀数组 or hash
Musical Theme 题意 给出n个1-88组成的音符,让找出一个最长的连续子序列,满足以下条件: 长度大于5 不重叠的出现两次(这里的出现可以经过变调,即这个序列的每个数字全都加上一个整数x) ...
- POJ.1743.Musical Theme(后缀数组 倍增 二分 / 后缀自动机)
题目链接 \(Description\) 给定一段数字序列(Ai∈[1,88]),求最长的两个子序列满足: 1.长度至少为5 2.一个子序列可以通过全部加或减同一个数来变成另一个子序列 3.两个子序列 ...
- POJ 1743 Musical Theme ——后缀数组
[题目分析] 其实找最长的不重叠字串是很容易的,后缀数组+二分可以在nlogn的时间内解决. 但是转调是个棘手的事情. 其实只需要o(* ̄▽ ̄*)ブ差分就可以了. 背板题. [代码] #include ...
- POJ 1743 Musical Theme ( 后缀数组 && 最长不重叠相似子串 )
题意 : 给 n 个数组成的串,求是否有多个“相似”且不重叠的子串的长度大于等于5,两个子串相似当且仅当长度相等且每一位的数字差都相等. 分析 : 根据题目对于 “ 相似 ” 串的定义,我们可以将原 ...
- POJ 1743 Musical Theme 后缀数组 不可重叠最长反复子串
二分长度k 长度大于等于k的分成一组 每组sa最大的和最小的距离大于k 说明可行 #include <cstdio> #include <cstring> #include & ...
随机推荐
- unity3d Resources.Load动态加载资源
初步整理并且学习unity3d资源加载方法,预计用时两天完成入门学习Unity3d常用两种加载资源方案:Resources.Load和AssetBundle Resources.Load就是从一个缺省 ...
- k8s入门简介
1.docker的三种编排工具 Docker的第一类编排工具: a.docker compose(docker原生):只能对一个主机上的容器进行编排,无法编排多个主机上的容器; b.docker sw ...
- linux下的C语言开发(网络编程)
http://blog.csdn.net/feixiaoxing/article/details/7259675 [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing ...
- standford情感分析代码开源地址
http://nlp.stanford.edu/sentiment/code.html
- intent 支持的action 动作
String ACTION_AIRPLANE_MODE_CHANGED Broadcast Action: The user has switched the phone into or out of ...
- java数据库连接池简单实现
package cn.lmj.utils; import java.io.PrintWriter; import java.lang.reflect.InvocationHandler; import ...
- Solaris 下解决上网问题以及远程登录问题
解决乱码问题 参考文章 http://www.jb51.net/os/Solaris/1656.html solaris 显示乱码的解决方法 现象: 利用命令 : LANG=zh; export LA ...
- ffmpeg rtmp 推流错误WriteN, RTMP send error 10053 10038
利用ffmepg推264流到rtmp服务端出现错误WriteN, RTMP send error 10053,具体如下图所示. 图1推流到rtmp服务错误 原因是视频流缺少SPS,PPS信息,加上这两 ...
- Django知识梳理
请求周期: url > 路由 > 函数或类 > 返回字符串或模板语言 Form 表单提交: 先处理模板语言再讲HTML发出去 提交 > url > 函数或类中的方法 — ...
- JAVA调用命令行2
package loadMBQL; import java.io.File; import java.io.FilenameFilter; public class LoadMBQL { /** * ...