A9577.添加元素让数组变为好数组
普及/提高-
通过率:0%
时间限制:2.00s
内存限制:256MB
题目描述
时间限制:2000ms
内存限制:256MB
如果一个非负整数数组 a1,a2,…,am 满足 a1+a2+⋯+am=2⋅(a1⊕a2⊕⋯⊕am) 我们便称其为 好数组,其中 ⊕ 表示 按位异或(XOR)。
例如,数组 [1,2,3,6] 是一个 好数组,因为 1+2+3+6=12=2⋅6=2⋅(1⊕2⊕3⊕6)。但是数组 [1,2,1,3] 不是一个好数组,因为 1+2+1+3=7=2⋅1=2⋅(1⊕2⊕1⊕3)。
给你一个长度为 n 的数组:a1,a2,…,an。你最多可以添加 3 个元素让这个数组变为一个 好数组。添加的元素不需要互不相同。题目保证一定有解。如果存在不同解,输出任意一组满足条件的解即可。注意 你不需要最小化添加元素的数量。所以如果一个数组已经是 好数组 了你可添加元素,也可以不添加,只需要保证操作后的数组是一个 好数组 即可。
输入格式
每个测试点包含多个测试用例。第一行为测试用例的总数 t(1≤t≤104)。
每个测试用例的第一行为数组的大小 n(1≤n≤105)。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(0≤ai≤109) 为数组的元素。
题目保证所有测试用例的 n 的总和不超过 105。
输出格式
每个测试用例输出两行。
在第一行中输出一个整数 s(0≤s≤3) 表示要添加的元素数量。
在第二行中输出 s 个整数 b1,…,bs(0≤bi≤1018) 表示要添加的元素。
如果不同的解,输出任意一组满足条件的即可。
输入输出样例
输入#1
3 4 1 2 3 6 1 8 2 1 1
输出#1
0 2 4 4 3 2 6 2
说明/提示
第一个测试用例中,所有数组元素的和为 12,他们的异或和为 6,已经满足条件所以可以不用添加元素。
第二个测试用例中,添加 4,4 到数组中后,数组变为 8,4,4。数组的元素和为 16,异或和为 8,满足条件。