CF1895D 题解
_sunkuangzheng_ · · 题解
当
你只需要关心
由题目中的式子可知,
设
我们发现所有
/**
* author: sunkuangzheng
* created: 03.11.2023 23:00:09
**/
#include<bits/stdc++.h>
using namespace std;
const int N = 6e6+5;
int t,n,ch[N][2],tot,val[N],a[N],b[N],ans;
void ins(int x){
int s = 0;
for(int i = 22;i >= 0;i --){
val[s] ++;
if(!ch[s][(x >> i) & 1]) ch[s][(x >> i) & 1] = ++tot;
s = ch[s][(x >> i) & 1];
}val[s] ++;
}int qry(int x){
int s = 0,ans = 0;
for(int i = 22;i >= 0;i --){
int k = (x >> i) & 1;
if(ch[s][!k]) s = ch[s][!k],ans += (1 << i);
else s = ch[s][k];
}return ans;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0);
cin >> n;
for(int i = 1;i < n;i ++) cin >> a[i],b[i] = a[i] ^ b[i-1],ins(b[i]);
for(int i = 0;i < n;i ++) if(qry(i) < n) {ans = i;break;}
cout << ans << " ";
for(int i = 1;i < n;i ++) cout << (ans ^ b[i]) << " ";
}