1 条题解
-
0
题意
有 个数,分成两个集合,异或和分别是 和 。
先最大化 ,再最小化 。
关键点
设所有数的异或和为 ,则 。- 如果 的某一位是 ,则 和 在这一位一定不同(一个 一个 ),那么这一位对 的贡献固定为 (即 )。
- 如果 的某一位是 ,则 和 在这一位相同,如果都是 ,则贡献 ,否则贡献 。
所以要最大化 ,就要让 的位上尽量取 。
做法
- 先求 = 所有数的异或和。
- 用线性基,但优先处理 的位(高位到低位插入)。
- 令 ,从高位到低位(只看 的位),如果这一位在基中且 这一位是 ,就异或上这个基向量,让 这一位变成 (这样 最大)。
- 从高位到低位(只看 的位),如果这一位在基中且 这一位是 ,就异或上这个基向量,让 这一位变成 (这样 最小,且不改变 的值)。
- 输出 。
样例
, 数:1 1 2 2 3 3 4 4
,所以所有位都是 的情况。
最大化 就要让 尽量大(因为 ),但题目要求此时 最小,所以是在所有能达到最大异或和的 中选最小的。
最大异或和是 7(子集 {1,2,4} 或 {3,4} 等),最小的 就是 7。
- 1
信息
- ID
- 3357
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者