CF2124A Deranged Deletions
题目描述
如果一个长度为 $m$ 的数组 $b$ 满足以下性质,则称其为“错位排列”:
- 令 $c$ 为长度为 $m$ 的数组,且 $c_i = b_i$,对于所有 $1 \leq i \leq m$。
- 将 $c$ 按非递减顺序排序。
- 如果对于所有 $1 \leq i \leq m$,都有 $b_i \neq c_i$,则 $b$ 是一个错位排列。
例如:
- 如果 $b = [4,8,3,1]$,则排序后 $c = [1, 3, 4, 8]$。由于所有位置上 $b_i \neq c_i$,所以 $b$ 是一个错位排列。
- 如果 $b = [3,2,1]$,排序后 $c = [1, 2, 3]$。由于 $b_2 = c_2$,所以 $b$ 不是错位排列。
现在给定一个长度为 $n$ 的数组 $a$。每次操作你可以从 $a$ 中删除一个元素,删除后剩余元素的顺序保持不变。
请判断是否可以通过若干次(可以为零次)操作,使得剩下的数组是一个错位排列。如果可以,输出任意一个可能的剩余数组。剩余数组必须非空。
输入格式
每组测试数据包含多组测试用例。第一行包含测试用例个数 $t$($1 \le t \le 100$)。接下来是每组测试用例的描述。
每组测试用例的第一行包含一个整数 $n$($1 \leq n \leq 100$),表示数组 $a$ 的长度。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq n$),表示数组 $a$。
输出格式
对于每个测试用例,输出一行,如果可以通过若干次操作使剩余数组为错位排列,输出 YES,否则输出 NO。
输出不区分大小写,例如 "yEs"、"yes"、"Yes" 和 "YES" 都视为肯定回答。
如果你的回答是肯定的,请再输出两行,格式如下:
- 第一行输出一个整数 $k$($1 \leq k \leq n$),表示剩余数组的元素个数。
- 第二行输出 $d_1, d_2, \ldots, d_k$,表示剩余的数组。该数组必须可以通过对 $a$ 进行若干次操作得到,并且是一个错位排列。
说明/提示
在第二个测试用例中,我们可以删除一个 $5$,使数组变为 $[4,5,2,4]$。可以证明该数组是一个错位排列。这不是唯一解——原数组 $[4,5,5,2,4]$ 也是一个合法解。
由 ChatGPT 4.1 翻译