A

既然给定的 nn 是偶数,那么往奇偶性的角度去考虑。

既然第 ii 个数从 Si={ipi,0,ipi}S_i=\{-ip_i,0,ip_i\} 中选,那么只要我们让这三个数恒为偶数,最终就不可能凑出一个 11

那么只需要让 p1,p3,,pn1p_1,p_3,\dots, p_{n-1} 为偶数,p2,p4,,pnp_2,p_4,\dots,p_n 为奇数即可。

复杂度 O(n)O(n)

B

注意到 n50n\le 50 并且要求 1ai10171\le a_i\le 10^{17},猜测和 2n2^n 有关系。

由于 i=1k2i1=2k1\sum_{i=1}^{k} 2^{i-1}=2^k -1,那么我们需要一个不是 22 的幂的数字凑出这个 11

考虑用较小的数 33,那么既然要让最终的和能被 33 整除,就让和为 3×2k3\times 2^k

观察到 3(i=1k2i1)=3×2k33(\sum_{i=1}^k 2^{i-1})=3\times 2^{k}-3,展开前面的和式为 3+6+12+24+3+6+12+24+\cdots,前面只需要再给一个 1,21,2 就能让最终的和为 3×2k3\times 2^k 了。

这里注意 n=2n=2 时,由于 a1(a1+a2),a2(a1+a2)a_1\mid (a_1+a_2),a_2\mid (a_1+a_2),可以推出 a1a2a_1\mid a_2a2a1a_2\mid a_1,那么就有 a1=a2a_1=a_2,这不符合题目要求,于是无解。

综上所述,构造方案如下:

  1. n=1n=1,输出任意数字即可;
  2. n=2n=2,输出 1-1
  3. 否则,输出 1,2,3×20,3×21,,3×2n31,2,3\times 2^0,3\times 2^1,\dots, 3\times 2^{n-3} 即可。

复杂度 O(n)O(n)

C

将符合要求的交替数列分为长度为奇数和偶数两类。

先看偶数长度。由于 ai1ai2,ai3ai4a_{i_1}\le a_{i_2},a_{i_3}\le a_{i_4},那么 (ai1ai2)+(ai3ai4)+0(a_{i_1}-a_{i_2})+(a_{i_3}-a_{i_4})+\cdots \le 0,要让最终的和为 00,当且仅当 ai1=ai2,ai3=ai4a_{i_1}=a_{i_2},a_{i_3}=a_{i_4},以此类推。

按照乘法原理,我们需要在每一个连续的相等段中,选出偶数个数字。也就是说,如果一个相等段长度为 ll,那么在这个段中的选的方案数就是:

(l0)+(l2)++(l2l/2)=2l1\binom{l}{0}+\binom{l}{2}+\dots+\binom{l}{2\lfloor l/2\rfloor}=2^{l-1}

其中 2l12^{l-1} 是根据二项式定理得出的:对 (1+x)l(1+x)^l 二项式展开,分别令 x=1x=1x=1x=-1 即可算出这个数。

再看奇数长度。由于 ai2ai3,ai4ai5a_{i_2}\le a_{i_3},a_{i_4}\le a_{i_5},那么 (ai2+ai3)+(ai4+ai5)+0(-a_{i_2}+a_{i_3})+(-a_{i_4}+a_{i_5})+\cdots \ge 0

又因为 ai10a_{i_1}\neq 0,所以必须有 (ai2+ai3)+(ai4+ai5)+1(-a_{i_2}+a_{i_3})+(-a_{i_4}+a_{i_5})+\cdots \ge 1;又因为最终的和为 00,所以只能是后面这一串等于 11,并且 ai1=1a_{i_1}=-1

我在赛时对着最后一项看了半天,发现并没有什么特殊的性质,因为按照相同的分析,只能看出 aik>0a_{i_k}>0,但是这个题目只说了负数只有 1-1,所以应当从对称的角度考虑。

也就是说,我们需要让后面的这些 pair 中恰好有一个 pair 的值为 11,其余的都为 00

又因为这个数组是升序排序的,那么这个 11 一定来源于两个相邻的连续段。

考虑按不同的相邻连续段划分所有的方案,那么每一种相邻连续段给出的贡献是:需要在前面 l1l_1 个数中选奇数个,在 l2l_2 个数中选奇数个,1-1 的段选奇数个,其余段都选偶数个。

由于二项式定理,若干个数选奇数个的方案数等于选偶数个的方案数

假设有 cc 这样的相邻连续段,把偶数长度的答案乘 cc 就是奇数的答案。

注意特判没有 1-1 的情况。

可以预处理出 22 的幂,复杂度 O(n)O(n)

D

如果没有一开始的增加操作,推导一下 a1ana_1\sim a_n 的答案是多少。

假设 2k2^k 是满足 2kai2^k\mid a_i 的最大值,也就是说,所有的 aia_i 都在二进制表示的末尾有 kk00,那么一开始就会有 kk 步就是把这些 00 除掉。

考虑后续操作,因为每一个数总是被若干次 1-1 和若干次 ÷2\div 2 变为 00 的,如果只考虑一个数 xx 被操作的次数,那么会是 l(x)+p(x)1l(x)+p(x)-1 次操作,其中 ll 表示二进制表示的长度,pp 表示二进制表示中 11 的数量。

那么这个上界是否总能被达到?进行了 kk 次操作后,这个数列中一定存在一个奇数,Bob 只需要把这个奇数一直放到第二个位置即可,所以最终的操作次数就是 k+i=1n[l(ai)+p(ai)1k]=(n1)k+i=1n[l(ai)+p(ai)1]k+\sum_{i=1}^n [l(a_i)+p(a_i)-1 - k]=-(n-1)k+\sum_{i=1}^n [l(a_i)+p(a_i)-1]

接下来我们考虑一开始的增加操作,考虑到上面的分析都和 lowbit\text{lowbit} 绕不开,所以这里猜测一个数只能加自己的 lowbit\text{lowbit} 的整数倍。

如何证明?假设 lowbit(ai)=L\operatorname{lowbit}(a_i)=L,那么加一个数 xx 一定不优于 xxmodLx-x\bmod L 的代价:从 kkl(ai),p(ai)l(a_i),p(a_i) 的分析可以轻松得出这一点。

由于这个 kk 比较难以处理,所以我们不妨直接枚举 k=0logAk=0\sim \log A,然后先把每个 aia_i 加到 2kai2^k\mid a_i,然后考虑最小化 l(ai)+p(ai)l(a_i)+p(a_i),此时每一个 aia_i 就是独立的了。

定义 f(x)=argminyxl(y)+p(y)f(x)=\arg \min_{y\ge x} l(y)+p(y),根据上面的分析,存在性质 f(x)=x+plowbit(x),p0f(x)=x+p\operatorname{lowbit}(x),p\ge 0

根据定义和性质,我们可以得出 f(x)=xf(x)=x 或者 f(x)=f(x+lowbit(x))f(x)=f(x+\operatorname{lowbit}(x))

说人话就是,只能在 xx 不断加自己的 lowbit\operatorname{lowbit} 的过程中取到。

考虑到当 xx22 的幂时,再加 lowbit(x)\operatorname{lowbit}(x) 就不会让 l(x)+p(x)l(x)+p(x) 减小了,所以这个过程会持续 O(logA)O(\log A) 次。

复杂度 O(nlog2A)O(n\log^2A)

E

我以为我能做出这道交互,直接跳过了 D,实际上做了一个小时也没有做出来,掉大分。

首先给出任意一个既有 00 又有 11xx,返回的 oo 有三种情况:

  1. o=xo=x
  2. oxo\subsetneq x
  3. xox\subsetneq o

对于情况 22,可以判断出 ty=&\text{ty} = \&,于是 xx11 的所有位上的 vv 是已知的,只需要让 m0,m1m_0,m_1 在这些位上有差异即可,对于情况 33 同理。

所以只需要考虑情况 11,此时我们无法确定 ty\text{ty},只能考虑 vv 是否有特殊位置的值是已知的。

这里只能给出题解的做法了:让询问的 x=1x=1,我们考虑 vv 的最低位,如果 vv 的最低位为 00,说明 ty=\text{ty}=|,那么 v=0v=0;反过来看,如果 v0v\neq 0,就有 vv 的最低位为 11

那么我们可以先判断 vv 是否为 00:如果 v=0v=0,那么返回的 mbv=mbm_b\oplus v=m_b;反之,如果返回的 mbv=m0m_b\oplus v=m_0 或者 mbv=m1m_b\oplus v=m_1,那么 v=0v=0 或者 v=m0m1v=m_0\oplus m_1

考虑随机化,令 m0=0m_0=0m1=12randint(0,2291)m_1=1\oplus 2\operatorname{randint}(0,2^{29}-1),这里主要是保证 m0m_0m1m_1 的最低位不同;此时 v=m0m10v=m_0\oplus m_1\neq 0 的概率是 2292^{-29},足够低。

T105T\le 10^5 组测试数据的情况下,全部正确的概率为 (1229)T1229T0.9998(1-2^{-29})^T\approx 1-2^{-29}T\ge 0.9998

所以通过一步随机化我们可以判出 vv 是否为 00,如果不是 00 只需要看它的最低位即可。

复杂度 O(1)O(1)