\(\large{题目链接}\)
\(\\\)
题意:
\(t\)组询问,每组给出一个\(n\)个元素的序列,最多在这个序列中添加3个元素使得整个序列的和为异或和的二倍。
\(1 \leq t \leq 10^4, 1 \leq n \leq 10^5\)
\(\\\)
思路:
一道思维题。
多试几个数据,会发现,可以先求出最初的和与异或和。
然后在序列中添加和,那么异或和就变为了0,这时再在序列中添加当前的和即可。
\(\\\)
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve() {
int n, a;
ll s = 0, x = 0;
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> a;
s += a;
x ^= a;
}
cout << "2" << endl << x << " " << s + x << endl;
}
int main() {
int t;
cin >> t;
for (; t; --t) solve();
return 0;
}