CF1237H Balanced Reversals
题目描述
你有两个长度相等且为偶数的字符串 $a$ 和 $b$,它们只包含字符 $0$ 和 $1$。
现在到了最后的决战时刻。为了让宇宙达到完美的平衡,你需要让字符串 $a$ 和 $b$ 完全相同。
每一步操作中,你可以选择 $a$ 的任意一个偶数长度的前缀并将其反转。形式化地说,若 $a = a_1 a_2 \ldots a_n$,你可以选择一个正的偶数 $p \le n$,然后将 $a$ 变为 $a_p a_{p-1} \ldots a_1 a_{p+1} a_{p+2} \ldots a_n$。
请你找到一种方法,在不超过 $n+1$ 次上述反转操作内,将 $a$ 变为 $b$,或者判断是否无法做到。操作次数不需要最小化。
输入格式
第一行包含一个整数 $t$($1 \le t \le 2000$),表示测试用例的数量。
每个测试用例包含两行。第一行是长度为 $n$ 的字符串 $a$,第二行是同样长度的字符串 $b$($2 \le n \le 4000$,且 $n$ 为偶数)。两个字符串都只包含字符 $0$ 和 $1$。
所有测试用例中 $n$ 的总和不超过 $4000$。
输出格式
对于每个测试用例,如果无法在不超过 $n+1$ 次反转操作内将 $a$ 变为 $b$,输出一个整数 $-1$。
否则,输出一个整数 $k$($0 \le k \le n+1$),表示你操作的次数,接下来输出 $k$ 个偶数 $p_1, p_2, \ldots, p_k$($2 \le p_i \le n$,且 $p_i$ 为偶数),表示每次操作选择反转的前缀长度,按操作顺序输出。
注意,$k$ 不需要最小化。如果有多种方案,输出任意一种即可。
说明/提示
在第一个测试用例中,字符串 $a$ 的变化如下:
- 第一次反转后:1000101011;
- 第二次反转后:0001101011;
- 第三次反转后:1101011000。
由 ChatGPT 4.1 翻译