CF1572B.Xor of 3
省选/NOI-
通过率:0%
时间限制:1.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given a sequence a of length n consisting of 0s and 1s.
You can perform the following operation on this sequence:
- Pick an index i from 1 to n−2 (inclusive).
- Change all of ai, ai+1, ai+2 to ai⊕ai+1⊕ai+2 simultaneously, where ⊕ denotes the bitwise XOR operation
Find a sequence of at most n operations that changes all elements of a to 0s 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 a to 0s, then there is also such a sequence of length not greater than n.
给你一个长度为 n 的序列 a,其中每个元素均为 0 或 1。
你可以对这个序列执行以下操作:
- 选择一个下标 i,满足 1≤i≤n−2;
- 同时将 ai、ai+1、ai+2 全部替换为 ai⊕ai+1⊕ai+2,其中 ⊕ 表示按位异或运算。
请找出一个最多包含 n 次操作的序列,使得序列 a 的所有元素均变为 0;若不存在这样的操作序列,则报告不可能。
我们可以证明:若存在某个(任意长度的)操作序列能将 a 的所有元素变为 0,则必然也存在一个长度不超过 n 的操作序列达成相同目标。
输入格式
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤104).
The first line of each test case contains a single integer n (3≤n≤2⋅105) — the length of a.
The second line of each test case contains n integers a1,a2,…,an (ai=0 or ai=1) — elements of a.
It is guaranteed that the sum of n over all test cases does not exceed 2⋅105.
每个测试包含多个测试用例。第一行包含测试用例的数量 t(1≤t≤104)。
每个测试用例的第一行包含一个整数 n(3≤n≤2⋅105)—— 数组 a 的长度。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(其中 ai=0 或 ai=1)—— 数组 a 的元素。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
For each test case, do the following:
- if there is no way of making all the elements of a equal to 0 after performing the above operation some number of times, print "NO".
- otherwise, in the first line print "YES", in the second line print k (0≤k≤n) — the number of operations that you want to perform on a, and in the third line print a sequence b1,b2,…,bk (1≤bi≤n−2) — the indices on which the operation should be applied.
If there are multiple solutions, you may print any.
对每个测试用例,执行以下操作:
- 如果无法通过上述操作执行若干次后使数组 a 的所有元素均变为 0,则输出 "NO"。
- 否则,在第一行输出 "YES";在第二行输出 k(0≤k≤n)—— 即你希望对 a 执行的操作次数;在第三行输出一个序列 b1,b2,…,bk(1≤bi≤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 0s so we don't need to change anything.
In the second example, we can transform [1,1,1,1,0] to [1,1,0,0,0] and then to [0,0,0,0,0] by performing the operation on the third element of a and then on the first element of a.
In the third example, no matter whether we first perform the operation on the first or on the second element of a we will get [1,1,1,1], which cannot be transformed to [0,0,0,0].
在第一个例子中,序列仅包含 0,因此我们无需进行任何修改。
在第二个例子中,我们可以将 [1,1,1,1,0] 先变换为 [1,1,0,0,0],再变换为 [0,0,0,0,0],具体操作是:先对 a 的第三个元素执行该操作,再对 a 的第一个元素执行该操作。
在第三个例子中,无论我们首先对 a 的第一个元素还是第二个元素执行该操作,结果均为 [1,1,1,1],而该序列无法被变换为 [0,0,0,0]。
输入解题思路,AI测评打分。不知道怎么写?