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{好数组}$ 即可。
内存限制: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$。
每个测试用例的第一行为数组的大小 $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})$ 表示要添加的元素。
如果不同的解,输出任意一组满足条件的即可。
在第一行中输出一个整数 $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
第一个测试用例中,所有数组元素的和为 $12$,他们的异或和为 $6$,已经满足条件所以可以不用添加元素。
第二个测试用例中,添加 $4, 4$ 到数组中后,数组变为 $8, 4, 4$。数组的元素和为 $16$,异或和为 $8$,满足条件。
第二个测试用例中,添加 $4, 4$ 到数组中后,数组变为 $8, 4, 4$。数组的元素和为 $16$,异或和为 $8$,满足条件。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?