脉冲同步
P4801. 脉冲同步
场次:2026年4月18日-开发岗 · 来源:CodeFun2000 P4801
题目描述
两座信号塔各自记录了一段脉冲信号,每段信号都是一个长度为 的排列,即由 1 到 n 这 个整数按某种顺序排列而成,每个整数恰好出现一次。工程师希望提取出两段信号中共同存在的最长脉冲序列,称为“同步序列”。若有多个长度相同的最长同步序列,则选择在字典序意义下最大的那一个,以便后续处理。
【排列】长度为 的排列是指由 每个整数恰好出现一次构成的序列。
【子序列】从一个序列中删除零个或多个元素(保持原有顺序)后得到的新序列。
【同步序列】若某个序列 既是序列 的子序列,也是序列 的子序列,则称 为 与 的一个同步序列。
【字典序比较】对于两个等长序列 和 ,找到最小的下标 使得 :若 ,则 字典序大于 ;若 ,则 字典序小于 ;若所有位置均相等,则 与 相等。
现在给定两段脉冲信号(排列),请你分别求出每一对信号中最长同步序列的长度,并输出字典序最大的那一条同步序列。
排列的长度 满足 。测试数据的组数 满足 ,且所有测试数据中 的总和不超过 。
输入格式
第一行包含一个整数 ,表示测试数据的组数。
接下来每组数据由三行组成:
- 第一行包含一个整数 ,表示两段脉冲信号(排列)的长度。
- 第二行包含 个整数,表示第一段脉冲信号(排列),包含 到 各恰好一次。
- 第三行包含 个整数,表示第二段脉冲信号(排列),包含 到 各恰好一次。
输出格式
对于每组测试数据,分两行输出结果:
- 第一行输出一个整数 ,表示最长同步序列的长度。
- 第二行输出 个整数,用空格分隔,表示字典序意义下最大的最长同步序列。
示例
示例 1
输入:
1
5
1 2 3 4 5
5 4 3 2 1输出:
1
5说明:
序列 完全逆序,任何两个不同数字在 中的顺序与在 中的顺序无法同时保持递增,因此最长同步序列的长度只能为 1。在所有长度为 1 的同步序列中,字典序最大的是仅由数字 构成的序列。
示例 2
输入:
1
6
1 3 2 4 6 5
1 2 3 4 5 6输出:
4
1 3 4 6说明:
是升序排列,因此要求在 中选出的子序列必须也是升序的。在 中的升序子序列有 1 3 4 6、1 2 4 6、1 3 4 5 等,它们的最长长度均为 4。在长度为 4 的同步序列中,字典序最大的为 1 3 4 6(优先比较首位数字,其次比较第二位数字,以此类推;1 3 4 6 的首位与其余序列相同,第二位 3 大于 2,故胜出)。
示例 3
输入:
1
2
2 1
1 2输出:
1
2说明:
的最小边界情况。 为 2 1, 为 1 2,两排列的最长公共子序列长度仅为 1。在所有长度为 1 的同步序列中,字典序最大的是 2。