CF1031E Triple Flips
题目描述
给定一个长度为 $n$ 的数组 $a$,数组元素仅包含 $0$ 和 $1$。
你可以多次进行如下操作,每次操作包括两个步骤:
1. 选择三个整数 $1 \le x < y < z \le n$,使得它们构成等差数列(即 $y - x = z - y$)。
2. 翻转 $a_x, a_y, a_z$ 的值(即将 $1$ 变为 $0$,将 $0$ 变为 $1$)。
请判断是否有可能通过若干次操作将数组所有元素都变为 $0$。如果可以,请输出实现这一目标的操作序列。你的解法中操作次数不得超过 $ (\lfloor \frac{n}{3} \rfloor + 12) $。其中 $\lfloor q \rfloor$ 表示对 $q$ 向下取整。可以证明,只要有解,总能在不超过该次数的操作内完成。
输入格式
第一行包含一个整数 $n$($3 \le n \le 10^5$),表示数组的长度。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \le a_i \le 1$),表示数组的元素。
输出格式
如果存在解,输出 "YES"(不带引号),否则输出 "NO"(不带引号)。字母大小写均可。
如果存在解,第二行输出一个整数 $m$($0 \le m \le (\lfloor \frac{n}{3} \rfloor + 12)$),表示操作次数。
接下来 $m$ 行,每行输出三个整数 $x_i, y_i, z_i$,表示第 $i$ 次操作选择的三个位置。顺序任意。
说明/提示
在第一个样例中,输出对应如下操作过程:
- 1 1 0 1 1(初始状态);
- 0 1 1 1 0(翻转了第 1、3、5 个元素);
- 0 0 0 0 0(翻转了第 2、3、4 个元素)。
也可以有其他解法。在本测试中,操作次数不得超过 $ \lfloor \frac{5}{3} \rfloor + 12 = 1 + 12 = 13 $。
在第二个样例中,唯一可行的操作是翻转所有元素。这样只能得到 0 1 0 和 1 0 1,无法全变为 0。
由 ChatGPT 4.1 翻译