CF1839C Insert Zero and Invert Prefix
题目描述
你有一个长度为 $n$ 的序列 $a_1, a_2, \ldots, a_n$,其中每个元素都是 $0$ 或 $1$,还有一个初始为空的序列 $b$。
你将进行 $n$ 次操作,每次操作会使 $b$ 的长度增加 $1$。
- 在第 $i$ 次操作时,你选择一个整数 $p$,满足 $0 \le p \le i-1$。你在序列 $b$ 的第 $p+1$ 个位置(即前 $p$ 个元素之后)插入 $0$,然后将 $b$ 的前 $p$ 个元素取反。
- 更正式地说:设第 $i$ 次($1 \le i \le n$)操作前的序列 $b$ 为 $b_1, b_2, \ldots, b_{i-1}$。在第 $i$ 次操作时,你选择一个整数 $p$,$0 \le p \le i-1$,并将 $b$ 替换为 $\overline{b_1}, \overline{b_2}, \ldots, \overline{b_{p}}, 0, b_{p+1}, b_{p+2}, \ldots, b_{i-1}$。其中 $\overline{x}$ 表示二进制取反,即 $\overline{0} = 1$,$\overline{1} = 0$。
你可以在下方的说明部分找到操作的示例。
请判断是否存在一组操作序列,使得最终 $b$ 等于 $a$。如果存在,请给出一种方案。
输入格式
每个测试点包含多组测试数据。第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试数据组数。
每组测试数据的第一行包含一个整数 $n$($1 \le n \le 10^5$),表示序列 $a$ 的长度。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \le a_i \le 1$),表示序列 $a$。
保证所有测试数据中 $n$ 的总和不超过 $10^5$。
输出格式
对于每组测试数据:
- 如果无法通过上述操作使 $b$ 等于 $a$,输出一行 "NO"(不含引号)。
- 否则,第一行输出 "YES"(不含引号),第二行输出 $n$ 个整数 $p_1, p_2, \ldots, p_n$($0 \le p_i \le i-1$),表示每次操作选择的 $p$。如果有多种方案,可以输出任意一种。
说明/提示
在第一个测试点中,
1. 第一次操作前,$b = [\,]$。你选择 $p = 0$,$b$ 变为 $[\, \underline{0} \,]$。
2. 第二次操作选择 $p = 0$,$b$ 变为 $[\, \underline{0}, 0 \,]$。
3. 第三次操作选择 $p = 2$,$b$ 变为 $[\, 1, 1, \underline{0} \,]$。
4. 第四次操作选择 $p = 1$,$b$ 变为 $[\, 0, \underline{0}, 1, 0 \,]$。
5. 第五次操作选择 $p = 3$,$b$ 变为 $[\, 1, 1, 0, \underline{0}, 0 \,]$。
因此,$b$ 的变化过程为:$[\,] \xrightarrow{p = 0} [\, \underline{0} \,] \xrightarrow{p = 0} [\, \underline{0}, 0 \,] \xrightarrow{p = 2} [\, 1, 1, \underline{0} \,] \xrightarrow{p = 1} [\, 0, \underline{0}, 1, 0 \,] \xrightarrow{p = 3} [\, 1, 1, 0, \underline{0}, 0 \,]$。最终 $b$ 等于 $a$,因此这是一种可行的方案。
在第二个测试点中,$n = 1$,唯一能得到的 $b$ 是 $[\, 0 \,]$。
在第三个测试点中,共有六种可能的操作序列:
1. $[\,] \xrightarrow{p = 0} [\, \underline{0} \,] \xrightarrow{p = 0} [\, \underline{0}, 0 \,] \xrightarrow{p = 0} [\, \underline{0}, 0, 0 \,]$。
2. $[\,] \xrightarrow{p = 0} [\, \underline{0} \,] \xrightarrow{p = 0} [\, \underline{0}, 0 \,] \xrightarrow{p = 1} [\, 1, \underline{0}, 0 \,]$。
3. $[\,] \xrightarrow{p = 0} [\, \underline{0} \,] \xrightarrow{p = 0} [\, \underline{0}, 0 \,] \xrightarrow{p = 2} [\, 1, 1, \underline{0} \,]$。
4. $[\,] \xrightarrow{p = 0} [\, \underline{0} \,] \xrightarrow{p = 1} [\, 1, \underline{0} \,] \xrightarrow{p = 0} [\, \underline{0}, 1, 0 \,]$。
5. $[\,] \xrightarrow{p = 0} [\, \underline{0} \,] \xrightarrow{p = 1} [\, 1, \underline{0} \,] \xrightarrow{p = 1} [\, 0, \underline{0}, 0 \,]$。
6. $[\,] \xrightarrow{p = 0} [\, \underline{0} \,] \xrightarrow{p = 1} [\, 1, \underline{0} \,] \xrightarrow{p = 2} [\, 0, 1, \underline{0} \,]$。
没有一种方式能使 $b$ 变为 $[\, 0, 1, 1 \,]$,因此答案为 "NO"。
由 ChatGPT 4.1 翻译