[USACO 5.1.3]乐曲主题
Description
我们用N(1 <= N <=5000)个音符的序列来表示一首乐曲,每个音符都是1..88范围内的整数,每个数表示钢琴上的一个键。很不幸这种表示旋律的方法忽略了音符的时值,但这项编程任务是关于音高的,与时值无关。 
许多作曲家围绕一个重复出现的“主题”来构建乐曲。在我们的乐曲表示法中,“主题”是整个音符序列的一个子序列,它需要满足如下条件: 
长度至少为5个音符 
在乐曲中重复出现(可能经过转调,见下) 
重复出现的同一主题不能重叠 
“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值。 
给定一段乐曲,计算其中最长主题的长度(即音符数)。
Input
第一行包含整数N。 
下面的每一行(最后一行可能除外)包含20个整数,表示音符序列。最后一行可能少于20个音符。
Output
输出应只含一个整数,即最长主题的长度。如果乐曲中没有主题,那么输出0。
Sample Input
30 
25 27 30 34 39 45 52 60 69 79 69 60 52 45 39 34 30 26 22 18 
82 78 74 70 66 67 64 60 65 80
Sample Output
5
Hint
样例提示: 
(这个长度为5的主题是输入文件中第一行的最后5个音符和第二行开头5个音符)
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int N=,INF=2e9;
int gi(){
int str=;char ch=getchar();
while(ch>'' || ch<'')ch=getchar();
while(ch>='' && ch<='')str=(str<<)+(str<<)+ch-,ch=getchar();
return str;
}
int n,k,S[N],s[N],rk[N],sa[N],tmp[N],high[N];
bool comp(int i,int j){
if(rk[i]!=rk[j])return rk[i]<rk[j];
int ri=i+k<=n?rk[i+k]:-;
int rj=j+k<=n?rk[j+k]:-;
return ri<rj;
}
void Getsa(){
for(int i=;i<=n;i++){
sa[i]=i;rk[i]=s[i];
}
for(k=;k<=n;k<<=){
sort(sa+,sa+n+,comp);
for(int i=;i<=n;i++)tmp[sa[i]]=tmp[sa[i-]]+comp(sa[i-],sa[i]);
for(int i=;i<=n;i++)rk[i]=tmp[i];
}
}
void Gethight(){
int h=,j;
for(int i=;i<=n;i++){
j=sa[rk[i]-];
if(h)h--;
for(;j+h<=n && i+h<=n;h++)if(s[j+h]!=s[i+h])break;
high[rk[i]-]=h;
}
}
int ans=;
void Getanswer(){
int t;
for(int i=;i<n;i++){
t=INF;
for(int j=i;j<n;j++){
if(high[j]<t)t=high[j];
if(t<)break;
if(abs(sa[i]-sa[j+])>t && t>ans)ans=t;
}
}
if(ans)
printf("%d\n",ans+);
else printf("0\n");
}
int main()
{
freopen("theme.in","r",stdin);
freopen("theme.out","w",stdout);
n=gi();
for(int i=;i<=n;i++)S[i]=gi();
for(int i=;i<n;i++)s[i]=S[i+]-S[i]+;
n--;Getsa();Gethight();Getanswer();
return ;
}
[USACO 5.1.3]乐曲主题的更多相关文章
- COGS 902 乐曲主题 题解 & hash入门贺
		[题意] 给定一个长为n的序列,元素都是不超过88的正整数,求序列中主题的最大长度. 所谓主题是指在序列中出现了至少两次并且不相交的子串.特别的,主题可以变调,也就是说如果一个子串全部加上或减去一个数 ... 
- 洛谷P2743 乐曲主题Musical Themes [USACO5.1] SA
		正解:SA 解题报告: 传送门 这题三个条件嘛,那就一个个考虑下都解决了就把这题解决了嘛QwQ 那就直接分别针对三个条件写下各个击破就欧克辣? 1)长度大于等于5:求出答案之后和5比大小 2)不能有公 ... 
- Luogu P2743 [USACO5.1]乐曲主题Musical Themes
		链接 \(Click\) \(Here\) 人生第一道后缀数组的题目.首先要对输入的串进行差分处理,差分后长度为(\(n - 1\))的相同子段就是原串中长度为\(n\)的相同(可变调)子段.求出来\ ... 
- [USACO5.1] 乐曲主题Musical Themes
		题目链接:戳我 Emmm......hash怎么做啊不会啊 这里是SA后缀数组版本的 就是先两两做差分,作为要处理后缀的数组.普通地求出来h数组之后,我们二分这个答案,然后判定是否合法就行了.是否合法 ... 
- 乐曲主题Musical Themes
		SA例题 题面 对于串 \(S\) 的两个子串 \(A\) 和 \(B\) ,满足 \(k = |A| = |B|\),\(\exists c \forall i\, a_i + c=b_i\),且 ... 
- 学校作业-Usaco DP水题
		好吧,因为USACO挂掉了,所以我写的所有代码都不保证正确性[好的,这么简单的题,再不写对,你就可以滚粗了! 第一题是USACO 2.2.2 ★Subset Sums 集合 对于从 1 到 N 的连 ... 
- P2743(poj1743) Musical Themes[差分+后缀数组]
		P2743 乐曲主题Musical Themes(poj1743) 然后呢这题思路其实还是蛮简单的,只是细节特别多比较恶心,忘记了差分带来的若干疏漏.因为转调的话要保证找到相同主题,只要保证一段内相对 ... 
- 详解树莓派Model B+控制蜂鸣器演奏乐曲
		步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这里将用GPIO的PWM接口驱动无源蜂鸣器弹奏乐曲,本文基于树莓派Mode B+,其他版本树莓派实现时需参照相关资料进行修改! 1 预备知识 1.1 ... 
- Connect() 2016 大会的主题 ---微软大法好
		文章首发于微信公众号"dotnet跨平台",欢迎关注,可以扫页面左面的二维码. 今年 Connect 大会的主题是 Big possibilities. Bold technolo ... 
随机推荐
- 201421123042 《Java程序设计》第11周学习总结
			1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ... 
- codeforces 830 B  Cards Sorting
			B. Cards Sorting http://codeforces.com/problemset/problem/830/B Vasily has a deck of cards consisti ... 
- Scala 集合入门
			1. 数组 1.1 定长数组 scala.Array 是定长的可变的索引型集合, JVM 中, Scala 的 Array 是以 Java 数组方式实现. String 对应 java.lang.St ... 
- nyoj 对决吃桃
			时间限制:3000 ms | 内存限制:65535 KB 难度:0 描述 有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此,到第m天早 ... 
- 02-移动端开发教程-CSS3新特性(中)
			1. 新的背景 背景在CSS3中也得到很大程度的增强,比如背景图片尺寸.背景裁切区域.背景定位参照点.多重背景等. 1.1 background-size设置背景图片的尺寸 cover会自动调整缩放比 ... 
- Python-迭代器&生成器&装饰器&软件目录结构规范-Day5
			目录Day-Python-迭代器&生成器 21.生成器 21.1.生成器引入 21.2.生成器作用 31.3.创建生成器的方法 31.4.用函数来实现复杂的生成器 51.5.把函数变成生成器通 ... 
- maven的使用之一简单的安装
			首先,我们知道,在传统的项目中,我们会导入一堆的jar包,那样的话,我们会发现我们的jar包的大小已经占了整个项目大小的90%以上,甚至更多,而且,我们的jar包只能自己使用,如果 其他人想用的话,还 ... 
- python 开发之路 -MySQL
			阅读目录 第一篇 : 数据库 之 基本概念 第二篇 : MySQL 之 库操作 第三篇 : MySQL 之 表操作 第四篇 : MySQL 之 数据操作 第五篇 : MySQL 之 视图.触发器.存储 ... 
- 解决cors跨域的filter
			import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.Ordered; im ... 
- layer ui插件显示tips时,修改字体颜色
			今天做调查问卷,又遇到一个蛋疼小问题,记录下. 调查问卷有很多选项是要求必填的,如果不填的话,需要给出友好的提示.用的如下组件:http://layer.layui.com/ 1.之前一直默认用的: ... 
