#P12738. [POI 2016 R2] 口吃 Stutter

[POI 2016 R2] 口吃 Stutter

题目背景

翻译来自于 LibreOJ

题目描述

题目译自 XXIII Olimpiada Informatyczna — II etap Zająknięcia

Bitek 最近患上了一种怪病:他说话严重口吃,而且只会说出数字。他的哥哥 Bajtek 却发现,Bitek 的口吃模式似乎有规律可循。Bajtek 怀疑弟弟在装病,借此逃学,偷偷在家玩电脑游戏。这让 Bajtek 无法专心学习编程,感到十分沮丧。于是,他决定揭穿弟弟的把戏,希望借此赢得充足的编程时间。

让我们来正式描述 Bajtek 的猜想。假设有两个数字序列 AABB,分别表示 Bitek 的两次发言:

  • 序列 AA 的子序列是通过从 AA 中删除任意元素后得到的序列。例如,1,1,7,51,1,7,51,3,1,7,6,6,5,51,3,1,7,6,6,5,5 的子序列。
  • 序列 AA 的“口吃序列”是一个子序列,由连续的成对相同元素组成。例如,1,1,1,1,3,31,1,1,1,3,31,2,1,2,1,2,1,3,31,2,1,2,1,2,1,3,3 的口吃序列。

给定 Bitek 的两次发言序列 AABB,请帮助 Bajtek 找出同时出现在两个序列中的最长口吃序列的长度。

输入格式

第一行包含两个整数 n,mn, m (n,m2)(n, m \geq 2),分别表示序列 AABB 的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n (1ai109)(1 \leq a_i \leq 10^9),表示序列 AA 的元素。

第三行包含 mm 个整数 b1,b2,,bmb_1, b_2, \ldots, b_m (1bi109)(1 \leq b_i \leq 10^9),表示序列 BB 的元素。

输出格式

输出一个非负整数,表示序列 AABB 的最长公共口吃序列的长度。若无公共口吃序列,输出 00

7 9
1 2 2 3 1 1 1
2 4 2 3 1 2 4 1 1
4

提示

样例 1 解释

最长公共口吃序列为 2,2,1,12, 2, 1, 1

附加样例

  1. n=5,m=4n=5, m=4,所有数字均为 4242
  2. n=9,m=13n=9, m=13,序列为 OLIMPIADAINFORMATYCZNA 的 ASCII 编码。
  3. n=15000,m=15000n=15000, m=15000,序列 AA 由成对递增数字组成(1,1,2,2,3,3,,7500,75001,1,2,2,3,3,\ldots,7500,7500),序列 BBAA 的逆序。
  4. n=10000,m=5000n=10000, m=5000,两序列由 13133737 的成对交替组成(13,37,13,37,13,37,13,37,\ldots)。

详细子任务附加限制及分值如下表所示。

子任务 附加限制 分值
11 n,m2000n, m \leq 2000 3030
22 n,m15000n, m \leq 15000,每个数字在序列中至多出现两次 2828
33 n,m15000n, m \leq 15000 4242