「CF1572B」Xor of 3

Description

Link:CF1572B

给出一个长度为 nn 的序列 aa,仅由 0011 构成。

你需要对序列进行至多 nn 次操作(或者说明这是不可能的),每次操作你可以选择一个下标 ii (1in21 \leq i \leq n - 2),然后将 ai,ai+1,ai+2a_i, a_{i + 1}, a_{i + 2} 均改成 aiai+1ai+2a_i \oplus a_{i + 1} \oplus a_{i + 2}

数据范围:3n2×1053 \leq n \leq 2 \times 10^50ai10 \leq a_i \leq 1

时空限制:11s / 256256MiB。

Solution

首先注意到,经过一次操作之后,所有数的异或和肯定不变。故有一个必要条件是,所有数的异或和为 00

nn 为奇数时,有一个构造:

  • 先选择 n2,n4,,3,1n - 2, n - 4, \cdots, 3, 1 进行操作。此时 a1=0a_1 = 0(即所有数的异或和),且 a2i=a2i+1a_{2i} = a_{2i + 1}
  • 再选择 1,3,,n4,n21, 3, \cdots, n - 4, n - 2 进行操作。此时每次操作的位置 xx 必定满足 ax=0,ax+1=ax+2a_x = 0, a_{x + 1} = a_{x + 2},故该次操作会使得 ax=ax+1=ax+2=0a_x = a_{x + 1} = a_{x + 2} = 0

nn 为偶数时,考虑找一个长度为奇数,异或和为 00 的前缀,然后对前后缀进行同 nn 为奇数情况的构造。

可以证明,若找不到这样的前缀,则一定无解。因为此时原串形如 1aabb..zz1(即首尾均为 11a2i=a2i+1a_{2i} = a_{2i + 1}),不论如何操作仍然有 a2i=a2i+1a_{2i} = a_{2i+1},首尾的 11 无法消掉。