首先你要知道:
a
⊕
a
=
0
a
⊕
0
=
a
a \oplus a=0\\a\oplus0=a
a⊕a=0a⊕0=a
记
a
1
+
a
2
+
?
a
n
a_1+a_2+\cdots a_n
a1?+a2?+?an? 为
s
u
m
sum
sum,再记
a
1
⊕
a
2
⊕
?
a
n
a_1 \oplus a_2 \oplus \cdots a_n
a1?⊕a2?⊕?an? 为
X
O
R
XOR
XOR。
根据上述性质
1
1
1 如果加入一个
X
O
R
XOR
XOR 则此时异或和为
0
0
0,如果再加入一个
s
u
m
sum
sum 则根据上述性质
2
2
2 此时异或和为
s
u
m
sum
sum 由于加了一个
s
u
m
sum
sum 此时序列和为
2
×
s
u
m
2\times sum
2×sum,满足题目要求。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
long long T, n, i, sum, Xor, a[N];
int main(){
for(cin >> T; T; T --){
cin >> n;
for(i = 1, sum = 0, Xor = 0; i <= n; i ++){
cin >> a[i];
sum += a[i], Xor ^= a[i];
}
cout << 2 << " " << Xor << " " << sum + Xor << "\n";
}
return 0;
}