已结束 GESP排位赛#5

A1774 | 添加元素让数组变为好数组

时间限制2s
内存限制256MB
通过 / 提交0/0

题目描述

时间限制:2000ms
内存限制:256MB

如果一个非负整数数组 $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)$ 我们便称其为 $\textit{好数组}$,其中 $\oplus$ 表示 $\textbf{按位异或(XOR)}$。

例如,数组 $[1, 2, 3, 6]$ 是一个 $\textit{好数组}$,因为 $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$ 个元素让这个数组变为一个 $\textit{好数组}$。添加的元素不需要互不相同。题目保证一定有解。如果存在不同解,输出任意一组满足条件的解即可。注意 $\textbf{你不需要最小化添加元素的数量}$。所以如果一个数组已经是 $\textit{好数组}$ 了你可添加元素,也可以不添加,只需要保证操作后的数组是一个 $\textit{好数组}$ 即可。

输入格式

每个测试点包含多个测试用例。第一行为测试用例的总数 $t(1 \le t \le 10^4)$。

每个测试用例的第一行为数组的大小 $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})$ 表示要添加的元素。

如果不同的解,输出任意一组满足条件的即可。

输入输出样例

输入 #1
3
4
1 2 3 6
1
8
2
1 1
输出 #1
0

2
4 4
3
2 6 2
C++ 编辑器
输入
输出