(large{题目链接})
(\)
题意:
(t)组询问,每组给出一个(n)个元素的序列,最多在这个序列中添加3个元素使得整个序列的和为异或和的二倍。
(1 leq t leq 10^4, 1 leq n leq 10^5)
(\)
思路:
一道思维题。
多试几个数据,会发现,可以先求出最初的和(s)与异或和(x)。
然后在序列中添加(x),那么异或和就变为了0,这时再在序列中添加当前的和(s+x)即可。
(\)
代码:
#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;
}