CF1382A.Common Subsequence

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

Common Subsequence

题目描述

给定两个整数数组 a1,,ana_1,\ldots,a_nb1,,bmb_1,\ldots,b_m

你的任务是找到一个非空数组 c1,,ckc_1,\ldots,c_k,它既是 a1,,ana_1,\ldots,a_n 的子序列,也是 b1,,bmb_1,\ldots,b_m 的子序列。如果有多个答案,要求输出长度最小的一个。如果长度最小的答案也有多个,输出任意一个即可。如果不存在这样的数组,需要输出相应的信息。

一个序列 aa 是序列 bb 的子序列,当且仅当 aa 可以通过从 bb 中删除若干(可能为零)元素得到。例如,[3,1][3,1][3,2,1][3,2,1][4,3,1][4,3,1] 的子序列,但不是 [1,3,3,7][1,3,3,7][3,10,4][3,10,4] 的子序列。

输入格式

第一行包含一个整数 tt1t10001\le t\le 1000),表示测试用例的数量。接下来的 3t3t 行描述每个测试用例。

每个测试用例的第一行包含两个整数 nnmm1n,m10001\le n,m\le 1000),分别表示两个数组的长度。

第二行包含 nn 个整数 a1,,ana_1,\ldots,a_n1ai10001\le a_i\le 1000),表示第一个数组的元素。

第三行包含 mm 个整数 b1,,bmb_1,\ldots,b_m1bi10001\le b_i\le 1000),表示第二个数组的元素。

保证所有测试用例中 nn 的总和与 mm 的总和不超过 10001000($\sum\limits_{i=1}^t n_i, \sum\limits_{i=1}^t m_i\le 1000$)。

输出格式

对于每个测试用例,如果存在解,输出 "YES";否则输出 "NO"。

如果输出 "YES",下一行输出一个整数 kk1k10001\le k\le 1000),表示数组的长度,接着输出 kk 个整数 c1,,ckc_1,\ldots,c_k,表示该数组的元素。

如果有多个长度最小的解,输出任意一个即可。

说明/提示

在第一个测试用例中,[4][4][10,8,6,4][10, 8, 6, 4][1,2,3,4,5][1, 2, 3, 4, 5] 的子序列。该数组长度为 11,是两数组公共子序列的最小可能长度。

在第三个测试用例中,[3][3][2][2] 没有非空公共子序列,因此答案为 "NO"。

由 ChatGPT 4.1 翻译

样例

5
4 5
10 8 6 4
1 2 3 4 5
1 1
3
3
1 1
3
2
5 3
1000 2 2 2 3
3 1 5
5 5
1 2 3 4 5
1 2 3 4 5
YES
1 4
YES
1 3
NO
YES
1 3
YES
1 2

在线编程 IDE

建议全屏模式获得最佳体验