A9577.添加元素让数组变为好数组

普及/提高-

通过率:0%

时间限制:2.00s

内存限制:256MB

题目描述

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

如果一个非负整数数组 a1,a2,,ama_1, a_2, \dots, a_m 满足 a1+a2++am=2(a1a2am)a_1 + a_2 + \dots + a_m = 2\cdot(a_1 \oplus a_2 \oplus \dots \oplus a_m) 我们便称其为 好数组\textit{好数组},其中 \oplus 表示 按位异或(XOR)\textbf{按位异或(XOR)}

例如,数组 [1,2,3,6][1, 2, 3, 6] 是一个 好数组\textit{好数组},因为 1+2+3+6=12=26=2(1236)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] 不是一个好数组,因为 1+2+1+3=721=2(1213)1 + 2 + 1 + 3 = 7 \neq 2\cdot 1 = 2\cdot(1\oplus 2 \oplus 1 \oplus 3)

给你一个长度为 nn 的数组:a1,a2,,ana_1, a_2, \dots, a_n。你最多可以添加 33 个元素让这个数组变为一个 好数组\textit{好数组}。添加的元素不需要互不相同。题目保证一定有解。如果存在不同解,输出任意一组满足条件的解即可。注意 你不需要最小化添加元素的数量\textbf{你不需要最小化添加元素的数量}。所以如果一个数组已经是 好数组\textit{好数组} 了你可添加元素,也可以不添加,只需要保证操作后的数组是一个 好数组\textit{好数组} 即可。

输入格式

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

每个测试用例的第一行为数组的大小 n(1n105)n(1 \le n \le 10^5)

每个测试用例的第二行包含 nn 个整数 a1,a2,,an(0ai109)a_1, a_2, \dots, a_n (0\le a_i \le 10^9) 为数组的元素。

题目保证所有测试用例的 nn 的总和不超过 10510^5

输出格式

每个测试用例输出两行。

在第一行中输出一个整数 s(0s3)s(0 \le s \le 3) 表示要添加的元素数量。

在第二行中输出 ss 个整数 b1,,bs(0bi1018)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

说明/提示

第一个测试用例中,所有数组元素的和为 1212,他们的异或和为 66,已经满足条件所以可以不用添加元素。

第二个测试用例中,添加 4,44, 4 到数组中后,数组变为 8,4,48, 4, 4。数组的元素和为 1616,异或和为 88,满足条件。

首页