CF1704G Mio and Lucky Array
题目描述
Mio 有一个包含 $n$ 个整数的数组 $a$,以及一个包含 $m$ 个整数的数组 $b$。
Mio 可以对 $a$ 进行如下操作:
- 选择一个尚未被选择过的整数 $i$($1 \leq i \leq n$),然后对 $a$ 执行如下修改:将 $a_i$ 加 $1$,将 $a_{i+1}$ 减 $2$,将 $a_{i+2}$ 加 $3$,依此类推。形式化地说,对于 $i \leq j \leq n$,将 $(-1)^{j-i} \cdot (j-i+1)$ 加到 $a_j$ 上。
Mio 想要将 $a$ 变换,使其包含 $b$ 作为一个子数组。你能回答她是否可以做到,并给出一组操作方案(如果可能)吗?
如果通过删除若干(可能为零或全部)开头元素和若干(可能为零或全部)结尾元素后,$b$ 能从 $a$ 得到,则称 $b$ 是 $a$ 的一个子数组。
输入格式
输入包含多组测试数据。第一行包含一个整数 $t$($1 \leq t \leq 10^4$),表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 $n$($2 \leq n \leq 2 \cdot 10^5$),表示 $a$ 的元素个数。
第二行包含 $n$ 个整数 $a_1, a_2, \cdots, a_n$($-10^5 \leq a_i \leq 10^5$),表示数组 $a$。
第三行包含一个整数 $m$($2 \leq m \leq n$),表示 $b$ 的元素个数。
第四行包含 $m$ 个整数 $b_1, b_2, \cdots, b_m$($-10^{12} \leq b_i \leq 10^{12}$),表示数组 $b$。
保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。
输出格式
如果无法将 $a$ 变换为包含 $b$ 作为子数组的形式,输出 $-1$。
否则,第一行输出一个整数 $k$($0 \leq k \leq n$),表示需要操作的次数。
第二行输出 $k$ 个不同的整数,表示依次进行操作的位置。
如果有多种方案,可以输出任意一种。
注意,你不需要使操作次数最小。
说明/提示
在第一个测试用例中,序列 $a = [1,2,3,4,5]$。一种可行的方案是在 $i=1$ 处进行一次操作($a_1$ 加 $1$,$a_2$ 减 $2$,$a_3$ 加 $3$,$a_4$ 减 $4$,$a_5$ 加 $5$)。此时 $a$ 变为 $[2,0,6,0,10]$,其中包含 $b=[2,0,6,0,10]$ 作为子数组。
在第二个测试用例中,序列 $a = [1,2,3,4,5]$。一种可行的方案是在 $i=4$ 处进行一次操作($a_4$ 加 $1$,$a_5$ 减 $2$)。此时 $a$ 变为 $[1,2,3,5,3]$,其中包含 $b=[3,5,3]$ 作为子数组。
在第三个测试用例中,序列 $a = [-3, 2, -3, -4, 4, 0, 1, -2]$。一种可行的方案如下:
- 选择 $i=8$ 进行操作,此时 $a$ 变为 $[-3, 2, -3, -4, 4, 0, 1, -1]$。
- 选择 $i=6$ 进行操作,此时 $a$ 变为 $[-3, 2, -3, -4, 4, 1, -1, 2]$。
- 选择 $i=4$ 进行操作,此时 $a$ 变为 $[-3, 2, -3, -3, 2, 4, -5, 7]$。
- 选择 $i=3$ 进行操作,此时 $a$ 变为 $[-3, 2, -2, -5, 5, 0, 0, 1]$。
- 选择 $i=1$ 进行操作,此时 $a$ 变为 $[-2, 0, 1, -9, 10, -6, 7, -7]$。
最终 $a$ 变为 $[-2, 0, 1, -9, 10, -6, 7, -7]$,其中包含 $b=[10, -6, 7, -7]$ 作为子数组。
在第四个测试用例中,无法将 $a$ 变换为包含 $b$ 作为子数组的形式。
在第五个测试用例中,无法将 $a$ 变换为包含 $b$ 作为子数组的形式。
由 ChatGPT 4.1 翻译