CF 1438 题解

CF 1438 题解

A Specific Tastes of Andre

考虑一种非常简单的构造 :\(a_i=1\). 不难发现满足条件.

B Valerii Against Everyone

结论: 符合条件当且仅当有两个一样的元素.

证明:

充分性显然, 下证必要性.

若不存在两个一样的元素, 则由于无法进位, 故没有办法得到两个区间和在相同二进制位上为 \(1\), 证毕.

C Engineer Artem

可以选择是否 \(+1\) 相当于可以控制奇偶性. 于是只要相邻格黑白染色后让黑格中是奇数, 白格中是偶数就一定不会有相邻格子中的数一样.

D Powerful Ksenia

一个重要的观察是, 在操作前后, 整个序列的异或和不会改变.

如果序列长度是奇数, 那么只需要如下构造:

\[(1,2,3),(3,4,5),\dots,(n-2,n-1,n) \]

就可以让最后一个数是原序列异或和, 前面的数每两个之间相等.

然后把每两个相等的位置和最后一个数操作一下, 就可以让每个数都是原序列异或和.

如果是偶数:

首先, 最后局面所有数异或和一定是 \(0\) , 那么原序列异或和必然为 \(0\) , 否则无解.

否则把前 \(n-1\) 个数跑一遍如上构造, 此时前 \(n-1\) 个数都一样, 由于整个数列异或和为 \(0\), 那么此时最后一个元素和前面也一样, 操作结束.

E Yurii Can Do Everything

\(O(n^2)\) 的暴力是容易的. 考虑优化:

我们首先钦定 \(a_l\) 必须小于 \(a_r\) , 然后反过来再跑一遍.

有什么好处呢? 这样 \(sum_{r-1}-sum_l=a_l\oplus a_r<2^k.\) 其中 \(k= \lceil \log_2 a_l\rceil\).

这样, 对于每一个 \(a_r\)\(k\), 只会被枚举 \(3\) 次, 因为如果有更多次的话, 中间会超过 \(2^k\), 因此复杂度 \(O(n \log n)\).

F Olha and Igor

如果纯随机去操作, 有很大概率随机到根节点的两个子节点.

这意味着, 可以先操作一些次, 找到出现频次最大的两个答案, 然后枚举根节点的编号询问 \(n-2\) 次就可以了.

注意刷新输出流.

posted @ 2024-11-06 20:09  snowycat1234  阅读(63)  评论(0)    收藏  举报