1 条题解

  • 0
    @ 2025-10-19 15:47:57

    题意
    nn 个数,分成两个集合,异或和分别是 x1x_1x2x_2
    先最大化 x1+x2x_1 + x_2,再最小化 x1x_1


    关键点
    设所有数的异或和为 SS,则 x1x2=Sx_1 \oplus x_2 = S

    • 如果 SS 的某一位是 11,则 x1x_1x2x_2 在这一位一定不同(一个 00 一个 11),那么这一位对 x1+x2x_1+x_2 的贡献固定为 11(即 2i2^i)。
    • 如果 SS 的某一位是 00,则 x1x_1x2x_2 在这一位相同,如果都是 11,则贡献 2×2i2 \times 2^i,否则贡献 00

    所以要最大化 x1+x2x_1+x_2,就要让 S=0S=0 的位上尽量取 11


    做法

    1. 先求 SS = 所有数的异或和。
    2. 用线性基,但优先处理 S=0S=0 的位(高位到低位插入)。
    3. x1=0x_1=0,从高位到低位(只看 S=0S=0 的位),如果这一位在基中且 x1x_1 这一位是 00,就异或上这个基向量,让 x1x_1 这一位变成 11(这样 x1+x2x_1+x_2 最大)。
    4. 从高位到低位(只看 S=1S=1 的位),如果这一位在基中且 x1x_1 这一位是 11,就异或上这个基向量,让 x1x_1 这一位变成 00(这样 x1x_1 最小,且不改变 x1+x2x_1+x_2 的值)。
    5. 输出 x1x_1

    样例
    n=8n=8, 数:1 1 2 2 3 3 4 4
    S=0S=0,所以所有位都是 S=0S=0 的情况。
    最大化 x1+x2x_1+x_2 就要让 x1x_1 尽量大(因为 x1=x2x_1=x_2),但题目要求此时 x1x_1 最小,所以是在所有能达到最大异或和的 x1x_1 中选最小的
    最大异或和是 7(子集 {1,2,4} 或 {3,4} 等),最小的 x1x_1 就是 7。

    • 1

    「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set

    信息

    ID
    3357
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者