S42108.21-8 对齐异或

传统题 时间 1000 ms 内存 256 MiB 3 尝试 0 已通过 0

21-8 对齐异或

对齐异或

系数提取完了,但Echo-0的加密还有一个维度——异或。不是普通的加法,是异或。

"异或?"CC问。

"对。"你说,"给定nn个数,选一个子集,使得异或和最大。"

"子集?"

"对。"你说,"任意选一些数,把它们异或起来。"

"最大?"

"对。"你说,"让结果的二进制位尽可能高。"

"咋算?"

"线性基。"你说,"把每个数看成向量,用高斯消元的方法,构建一组基。"

"基?"

"对。"你说,"线性基里的每个数,最高位都不同。用它们可以表示任意子集异或和。"

"最大?"

"从高位到低位贪心。"你说,"如果异或上某个基能让结果更大,就异或。"

"第47个数。"你说,"值为47——二进制101111101111。"

"高位的1在哪?"

"第5位(从0开始)。"你说,"值为32。"

"能进基吗?"

"看前面有没有同样高位的。"你说,"如果没有,就能进。"

"进了有啥用?"

"可以表示所有最高位在第5位的数。"你说,"组合起来,能得到更大的异或和。"

CC看着那些二进制位——像一排灯,像一排开关,像某种只有0和1的世界。

"0和1。"她说,"简单。"

"对。"你说,"简单。"

"但我喜欢简单。"她说,"简单清楚。"

"我也喜欢。"你说。

Echo把线性基投射出来——像一座塔,像一组支柱,像某种支撑起整个空间的东西。

"以前这些基是散的。"她说,"现在……对齐了。"

"对齐了。"你说。

"对。"她说,"对齐了。"


题目描述

给定nn个数,求选一些数异或起来,能得到的最大值。

输入格式

第一行nn。第二行nn个整数。

输出格式

最大异或和。


输入样例

3
2
1 2
4
1 2 3 4
2
1 1
4
1 2 3 4
3
1 2 3
5
1 2 3 4 5

输出样例

Case #1:
1
2
3
-1
Case #2:
0
1
-1
-1
Case #3:
0
1
2
3
-1

提示

  • 线性基:高斯消元思想,维护每个最高位对应的基向量。
  • 从高位到低位贪心,求最大值。
  • 时间复杂度O(nlogMax)O(n\log Max)

在线编程 IDE

建议全屏模式获得最佳体验