1 条题解
-
0
给定 (,),要求构造长度为 的数组 ,满足:
- ;
- $a_1 \& a_2 \& \dots \& a_n = a_1 \oplus a_2 \oplus \dots \oplus a_n$;
在所有合法数组中,输出字典序最小的数组的第 个元素,不存在输出 。
条件分析
设
已知 。
按位分析
考虑某一位(二进制位):
- 如果这一位所有数的 AND = ,则所有数该位都是 ,且 必须为奇数(否则 XOR 该位 = ,矛盾)。
- 如果这一位所有数的 AND = ,则至少有一个数该位为 ,且 XOR 该位必须为 → 该位为 的个数为偶数。
从整体看:
结论 1: 为奇数
设 。
那么所有数在 的 位上全是 。
在 的 位上,这些位在数组中的出现次数为偶数(这样才能 XOR = ),且至少有一个 (保证 AND 该位 = )。
一个简单的构造方法是:让所有数相等,且等于 。- 的 位当然全 (所有数在该位 = )
- 的 位在该数组全为 (出现次数 , 奇数 → 出现次数为奇数,不是偶数!等等,这有问题)
检查:如果全为 , 某位为 ,那么所有数该位 = ,1 的个数 = (偶数)✅,AND 该位 = ✅。所以全相同数可行。
再验证 AND 和 XOR:
- AND:所有数相同 = ⇒ AND =
- XOR: 个数相同, 为奇数 ⇒ XOR = (因为 当 奇)。
所以确实成立。
且 要最小 → 即可,全数组为 。结论: 为奇数时,数组取 即可。
所以 。
结论 2: 为偶数
此时,从按位分析:
不能出现某位全 (否则 AND = ,XOR = 矛盾)。
所以至少存在一个数在某位为 ⇒ AND = 。
要满足 AND = XOR ⇒ XOR = 。等价条件:
- 数组中所有数的 AND = (即对每一位,至少有一个数该位为 )。
- 整个数组的 XOR = (即对每一位,1 的个数为偶数)。
因为 是偶数,一组可行构造是:取两个数 和 ,每个出现 次。
- AND = (因为每位的出现模式是 和 交叉)
- XOR = (因为 XOR 相同值偶数次 = ,再加上两数 XOR 重复的抵消)
具体:
若数组由 个 和 个 组成,则 XOR = 的出现次数为偶数?不对,
XOR = [ 次] () [ 次]
偶数次相同数 XOR = ,所以整体 XOR = ✅AND = (因为对每一位:只有 和 同时为 1 时 AND 才为 1)
所以我们需要 (这样 AND = = XOR)。
并且 。为了字典序最小,我们把两个 放在前面(索引 为 ),后面 放在索引 (中间有偶数个,所以 需要)。
字典序最小构造
取 ,需要找一个 在 中,使得 (AND 条件),并尽量小(这样 最小)。
如果 ,那么 , 可以选任意数,选最小的 ,那么全数组为 ✅(,XOR=0)。
如果 ,则找最小的 使 。
这个 可以用:- 对 逐位,找到一个更高位的 1 跳过重叠。
- 简单方法: 去掉所有 1 位的下一个值)。
更简单且保证能找到的是: 枚举 到 (因为 和 在低位无公共 1 时, 不会太远,若 很大,可能的 是 的幂次)。
所以算法:
- 若 ⇒ (全 0 数组)。
- 否则尝试 到 找 。
- 若没找到,取 (最小的比 大的 2 的幂),若 则 。
- 若没找到 ⇒ 。
- 找到 后,输出 :
或 ⇒
否则 ⇒ 。
时间复杂度
- 奇数:O(1)
- 偶数:O(1) 或 O(log r)(找最高位)
- 通过 。
最终答案规律
- 奇数:输出 。
- 偶数且 :输出 。
- 偶数且 :
- 若存在 使 ,取最小的
输出: 时输出 ,否则输出 。 - 否则输出 。
- 若存在 使 ,取最小的
- 1
信息
- ID
- 7127
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者