#P14037. [PAIO 2025] XOR multiset

[PAIO 2025] XOR multiset

Description

给定一个整数 nnn1n-1 个非负整数 a1,a2,,an1a_1, a_2, \dots, a_{n-1}

请你找到一个多重集 SS,其元素均选自 {1,2,,n1}\{1, 2, \dots, n-1\},满足以下要求:

  • xSx0(modn)\sum_{x \in S} x \equiv 0 \pmod n
  • xSax\bigoplus_{x \in S} a_x 的值最大,其中 \bigoplus 表示按位异或运算。按位异或运算会作用于两个数的二进制,每一位分别异或。例如 55(二进制 01010101)XOR 33(二进制 00110011)的结果是 66(二进制 01100110)。该运算符在 C++、Java 和 Python 中均为 ^

如果有多个满足上述要求的多重集,输出任意一个即可。

实现要求

你需要实现如下函数:

(int64, int32[]) find_multiset(int32 n, int64[] a)
  • nn:模数;
  • aa:长度为 n1n-1 的数组,a[i]a[i] 表示 ai+1a_{i+1}
  • 函数需返回一个二元组:
    • 第一个元素为 xSax\bigoplus_{x \in S} a_x 在所有合法 SS 中的最大值;
    • 第二个元素为满足要求的任意一个最优多重集 SSSS 的元素范围为 11n1n-1,大小不超过 2n2n

Input Format

无特殊输入格式说明。

Output Format

无特殊输出格式说明。

Hint

样例

find_multiset(3, {5, 10}) 的返回值应为 {15, {1, 2}}

  • 此时 n=3n=3a={5,10}a=\{5, 10\}(即 a1=5,a2=10a_1=5, a_2=10)。
  • 目标是找到 S{1,2}S \subseteq \{1, 2\},要求 xSx0(mod3)\sum_{x \in S} x \equiv 0 \pmod 3
  • 合法多重集如:\varnothing(和为 00)、{1,2}\{1,2\}(和为 303 \equiv 0)、{1,1,1}\{1,1,1\}(和为 303 \equiv 0)、{2,2,2}\{2,2,2\}(和为 606 \equiv 0)等。
  • S={1,2}S = \{1, 2\} 时,异或为 a1a2=510=15a_1 \oplus a_2 = 5 \oplus 10 = 15
  • S={1,1,1}S = \{1,1,1\} 时,异或为 $a_1 \oplus a_1 \oplus a_1 = 5 \oplus 5 \oplus 5 = 5$。
  • 最大异或值为 1515,由 S={1,2}S = \{1, 2\} 达成。

find_multiset(4, {8, 12, 6}) 的返回值应为 {14, {1, 3}}

  • 此时 n=4n=4a={8,12,6}a=\{8,12,6\}(即 a1=8,a2=12,a3=6a_1=8, a_2=12, a_3=6)。
  • 目标是找到 S{1,2,3}S \subseteq \{1, 2, 3\},要求 xSx0(mod4)\sum_{x \in S} x \equiv 0 \pmod 4
  • S={1,3}S = \{1, 3\} 时,结果为 a1a3=86=14a_1 \oplus a_3 = 8 \oplus 6 = 14
  • S={2,2}S = \{2, 2\} 时,结果为 a2a2=1212=0a_2 \oplus a_2 = 12 \oplus 12 = 0
  • 最大异或值为 1414,由 S={1,3}S = \{1, 3\} 达成。

样例评测器

样例评测器输入格式如下:

  • 第一行:一个整数 nn
  • 第二行:n1n-1 个整数 a1,a2,,an1a_1,a_2,\dots,a_{n-1}

评测器调用 find_multiset(n, a) 并输出如下格式:

  • 第一行:函数返回对的第一个元素;
  • 第二行:多重集的大小;
  • 第三行:多重集中的元素(如有),用空格分隔。

注意:样例评测器仅供本地测试。正式考试中的评测方式可能有所不同。

数据范围

  • 1n1051 \le n \le 10^5
  • 0ai<2620 \le a_i < 2^{62}i=1,2,,n1i = 1,2,\dots,n-1

评分标准

  • 子任务1(20分):n10n \le 10
  • 子任务2(40分):nn 为奇数
  • 子任务3(40分):无额外约束

每个子任务,若你输出的最大异或值与标准答案一致且多重集 SS 合法且能达到最大值,则可获得该子任务的全部分数。若所有测试点最大异或值正确而 SS 任意但合法,则该子任务 60% 得分。其余情况得分为 0%。

由 ChatGPT 5 翻译