CF1270C Make Good
\(\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;
}