AT_agc057_c.[AGC057C] Increment or Xor

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

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

题目描述

给定一个正整数 NN,以及一个长度为 2N2^N 的数列 A=(A0,A1,…,A2N−1)A = (A_0, A_1, \ldots, A_{2^N-1})。其中每个 AiA_i 是 00 到 2N−12^N-1 之间的整数,且对于 i≠ji \neq j,有 Ai≠AjA_i \neq A_j。

你可以对数列 AA 进行以下两种操作:

  • 操作 ++:对所有 ii,将 AiA_i 变为 (Ai+1) mod 2N(A_i + 1) \bmod 2^N。
  • 操作 ⊕\oplus:选择一个 00 到 2N−12^N-1 之间的整数 xx,对所有 ii,将 AiA_i 变为 Ai⊕xA_i \oplus x。

这里的 ⊕\oplus 表示按位异或(XOR)操作。

按位异或操作的定义如下:对于非负整数 A,BA, B,A⊕BA \oplus B 的二进制表示中,每一位 2k2^k(k≥0k \geq 0)的数值,如果 AA 和 BB 的该位中只有一个为 11,则为 11,否则为 00。

例如,3⊕5=63 \oplus 5 = 6(二进制表示为:011⊕101=110011 \oplus 101 = 110)。

你的目标是通过若干次操作,使得对于所有 ii,都有 Ai=iA_i = i。请判断能否达成目标。如果可以,请输出一种不超过 10610^6 次操作的方案。

输入格式

输入通过标准输入给出,格式如下:

NN A0A_0 A1A_1 …\ldots A2N−1A_{2^N-1}

输出格式

如果存在一种操作序列,使得对于所有 ii,Ai=iA_i = i,则输出 Yes,否则输出 No。

若输出 Yes,请继续输出一组操作序列,格式如下:

KK x1x_1 x2x_2 …\ldots xKx_K

其中 KK 表示操作次数,0≤K≤1060 \leq K \leq 10^6。xix_i 表示第 ii 次操作:

  • 若第 ii 次操作为 ++,则 xi=−1x_i = -1;
  • 若第 ii 次操作为 ⊕\oplus,则 xix_i 为本次操作选择的整数 xx。

如果存在多种方案,输出任意一种均可。

输入输出样例

  • 输入#1

    3
    5 0 3 6 1 4 7 2

    输出#1

    Yes
    4
    -1 6 -1 1
  • 输入#2

    3
    2 5 4 3 6 1 0 7

    输出#2

    No
  • 输入#3

    3
    0 1 2 3 4 5 6 7

    输出#3

    Yes
    0

说明/提示

约束条件

  • 1≤N≤181 \leq N \leq 18
  • 0≤Ai≤2N−10 \leq A_i \leq 2^N - 1
  • 对于 i≠ji \neq j,有 Ai≠AjA_i \neq A_j

样例解释 1

通过输出的操作序列,数列 AA 的变化如下:

  • 初始状态:A=(5,0,3,6,1,4,7,2)A = (5,0,3,6,1,4,7,2)
  • 操作 ++:A=(6,1,4,7,2,5,0,3)A = (6,1,4,7,2,5,0,3)
  • 操作 ⊕\oplus(x=6x = 6):A=(0,7,2,1,4,3,6,5)A = (0,7,2,1,4,3,6,5)
  • 操作 ++:A=(1,0,3,2,5,4,7,6)A = (1,0,3,2,5,4,7,6)
  • 操作 ⊕\oplus(x=1x = 1):A=(0,1,2,3,4,5,6,7)A = (0,1,2,3,4,5,6,7)

样例解释 2

无论如何操作,都无法达成目标。

样例解释 3

无需任何操作即可达成目标。空行的输出与判题结果无关。

由 ChatGPT 4.1 翻译

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

首页