CF1572B.Xor of 3

省选/NOI-

通过率:0%

时间限制:1.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

You are given a sequence aa of length nn consisting of 00s and 11s.

You can perform the following operation on this sequence:

  • Pick an index ii from 11 to n−2n-2 (inclusive).
  • Change all of aia_{i}, ai+1a_{i+1}, ai+2a_{i+2} to ai⊕ai+1⊕ai+2a_{i} \oplus a_{i+1} \oplus a_{i+2} simultaneously, where ⊕\oplus denotes the bitwise XOR operation

Find a sequence of at most nn operations that changes all elements of aa to 00s or report that it's impossible.

We can prove that if there exists a sequence of operations of any length that changes all elements of aa to 00s, then there is also such a sequence of length not greater than nn.

给你一个长度为 nn 的序列 aa,其中每个元素均为 00 或 11。

你可以对这个序列执行以下操作:

  • 选择一个下标 ii,满足 1≤i≤n−21 \le i \le n-2;
  • 同时将 aia_{i}、ai+1a_{i+1}、ai+2a_{i+2} 全部替换为 ai⊕ai+1⊕ai+2a_{i} \oplus a_{i+1} \oplus a_{i+2},其中 ⊕\oplus 表示按位异或运算。

请找出一个最多包含 nn 次操作的序列,使得序列 aa 的所有元素均变为 00;若不存在这样的操作序列,则报告不可能。

我们可以证明:若存在某个(任意长度的)操作序列能将 aa 的所有元素变为 00,则必然也存在一个长度不超过 nn 的操作序列达成相同目标。

输入格式

Each test contains multiple test cases. The first line contains the number of test cases tt (1≤t≤1041 \le t \le 10^4).

The first line of each test case contains a single integer nn (3≤n≤2⋅1053 \le n \le 2\cdot10^5) — the length of aa.

The second line of each test case contains nn integers a1,a2,…,ana_1, a_2, \ldots, a_n (ai=0a_i = 0 or ai=1a_i = 1) — elements of aa.

It is guaranteed that the sum of nn over all test cases does not exceed 2⋅1052\cdot10^5.

每个测试包含多个测试用例。第一行包含测试用例的数量 tt(1≤t≤1041 \le t \le 10^4)。

每个测试用例的第一行包含一个整数 nn(3≤n≤2⋅1053 \le n \le 2\cdot10^5)—— 数组 aa 的长度。

每个测试用例的第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(其中 ai=0a_i = 0 或 ai=1a_i = 1)—— 数组 aa 的元素。

保证所有测试用例的 nn 之和不超过 2⋅1052\cdot10^5。

输出格式

For each test case, do the following:

  • if there is no way of making all the elements of aa equal to 00 after performing the above operation some number of times, print "NO".
  • otherwise, in the first line print "YES", in the second line print kk (0≤k≤n0 \le k \le n) — the number of operations that you want to perform on aa, and in the third line print a sequence b1,b2,…,bkb_1, b_2, \dots, b_k (1≤bi≤n−21 \le b_i \le n - 2) — the indices on which the operation should be applied.

If there are multiple solutions, you may print any.

对每个测试用例,执行以下操作:

  • 如果无法通过上述操作执行若干次后使数组 aa 的所有元素均变为 00,则输出 "NO"。
  • 否则,在第一行输出 "YES";在第二行输出 kk(0≤k≤n0 \le k \le n)—— 即你希望对 aa 执行的操作次数;在第三行输出一个序列 b1,b2,…,bkb_1, b_2, \dots, b_k(1≤bi≤n−21 \le b_i \le n - 2)—— 即每次操作所作用的下标。

若存在多种解法,输出任意一种即可。

输入输出样例

  • 输入#1

    3
    3
    0 0 0
    5
    1 1 1 1 0
    4
    1 0 0 1

    输出#1

    YES
    0
    YES
    2
    3 1
    NO

说明/提示

In the first example, the sequence contains only 00s so we don't need to change anything.

In the second example, we can transform [1,1,1,1,0][1, 1, 1, 1, 0] to [1,1,0,0,0][1, 1, 0, 0, 0] and then to [0,0,0,0,0][0, 0, 0, 0, 0] by performing the operation on the third element of aa and then on the first element of aa.

In the third example, no matter whether we first perform the operation on the first or on the second element of aa we will get [1,1,1,1][1, 1, 1, 1], which cannot be transformed to [0,0,0,0][0, 0, 0, 0].

在第一个例子中,序列仅包含 00,因此我们无需进行任何修改。

在第二个例子中,我们可以将 [1,1,1,1,0][1, 1, 1, 1, 0] 先变换为 [1,1,0,0,0][1, 1, 0, 0, 0],再变换为 [0,0,0,0,0][0, 0, 0, 0, 0],具体操作是:先对 aa 的第三个元素执行该操作,再对 aa 的第一个元素执行该操作。

在第三个例子中,无论我们首先对 aa 的第一个元素还是第二个元素执行该操作,结果均为 [1,1,1,1][1, 1, 1, 1],而该序列无法被变换为 [0,0,0,0][0, 0, 0, 0]。

输入解题思路,AI测评打分。不知道怎么写?

首页