CF1270C Make Good

题目描述

我们称一个由非负整数组成的数组 $a_1, a_2, \dots, a_m$ 是“好”的,如果满足 $a_1 + a_2 + \dots + a_m = 2\cdot(a_1 \oplus a_2 \oplus \dots \oplus a_m)$,其中 $\oplus$ 表示[按位异或运算](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。 例如,数组 $[1, 2, 3, 6]$ 是“好”的,因为 $1 + 2 + 3 + 6 = 12 = 2\cdot 6 = 2\cdot (1\oplus 2 \oplus 3 \oplus 6)$。而数组 $[1, 2, 1, 3]$ 不是“好”的,因为 $1 + 2 + 1 + 3 = 7 \neq 2\cdot 1 = 2\cdot(1\oplus 2 \oplus 1 \oplus 3)$。 现在给你一个长度为 $n$ 的数组 $a_1, a_2, \dots, a_n$。你可以在数组末尾添加最多 $3$ 个元素,使其变为“好”的数组。添加的元素可以相同。已知在给定的约束下,解一定存在。如果有多种方案,你可以输出任意一种。注意,你不需要最小化添加元素的数量!因此,如果原数组已经是“好”的,你可以选择不添加元素。

输入格式

每组测试数据包含多个测试用例。第一行包含一个整数 $t$($1 \le t \le 10\,000$),表示测试用例的数量。 每个测试用例的第一行包含一个整数 $n$($1\le n \le 10^5$),表示数组的长度。 每个测试用例的第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($0\le a_i \le 10^9$),表示数组的元素。 保证所有测试用例中 $n$ 的总和不超过 $10^5$。

输出格式

对于每个测试用例,输出两行。 第一行输出一个整数 $s$($0\le s\le 3$),表示你要添加的元素个数。 第二行输出 $s$ 个整数 $b_1, \dots, b_s$($0\le b_i \le 10^{18}$),表示你要添加到数组末尾的元素。 如果有多种方案,你可以输出任意一种。

说明/提示

在样例的第一个测试用例中,所有数的和为 $12$,它们的 $\oplus$ 为 $6$,因此条件已经满足。 在样例的第二个测试用例中,添加 $4, 4$ 后,数组变为 $[8, 4, 4]$。此时所有数的和为 $16$,它们的 $\oplus$ 为 $8$。 由 ChatGPT 4.1 翻译