虽然有点花里胡哨,但是:
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100002
int n, t;
long long k;
unsigned int a[MAXN], b[MAXN], c[MAXN];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> t;
while (t--){
cin >> n >> k;
for (int i=1; i<=n; i++) cin >> a[i];
if ((n & 1) || (k & 1)){
for (int i=1; i<=n; i++) b[i] = b[i-1] ^ a[i];
for (int i=n; i>=1; i--) c[i] = c[i+1] ^ a[i];
for (int i=1; i<=n; i++) cout << (b[i-1] ^ c[i+1]) << ' ';
}else{
for (int i=1; i<=n; i++) cout << a[i] << ' ';
}
cout << '\n';
}
return 0;
}
其实就是预处理出 bi=j=1⨁iaj 和 ci=j=i⨁naj。但是不知道为什么错了