#P1743. Musical Theme
Musical Theme
题目描述
一段音乐旋律被表示为一个由 N(1 ≤ N ≤ 20000)个音符组成的序列,每个音符是 1 到 88 之间的整数,对应钢琴上的某个键。虽然这种表示方法忽略了音乐的节奏信息,但本题仅关注音符序列本身。 许多作曲家在创作时会围绕一个重复的“主题”展开。在本题中,主题是指旋律中满足以下条件的子序列: 1.长度至少为 5 个音符; 2.在旋律的其他位置(可能经过整体音高平移)再次出现(“平移”指对该子序列的每个音符加上或减去一个相同的整数值); 3.两次出现的位置不重叠(即至少有一次出现与其他出现完全不相交)。 给定一段旋律,计算其中最长主题的长度(音符数量)。
注意
本题的时间限制为 1 秒!
输入格式
输入包含多个测试用例。每个测试用例的第一行是整数 N,随后一行是 N 个音符序列。最后一个测试用例后跟一个 0。
输出格式
对于每个测试用例,输出一行,包含一个整数表示最长主题的长度。如果没有满足条件的主题,输出 0。
示例输入 1
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 0
示例输出 1
5
提示
使用 scanf 而非 cin 以提高读取速度。