D. Ehab and the Expected XOR Problem(Constructive & Xor)
因为区间限制,考虑构造异或前缀和数组。
需要满足
b l − 1 ⊕ b r ≠ 0 b_{l-1}\oplus b_r \ne 0 bl−1⊕br=0
b l − 1 ⊕ b r ≠ x b_{l-1}\oplus b_r \ne x bl−1⊕br=x
不能为 0 0 0,即不能存在相同的数。
不能为 x x x,因为任意两对异或值为 x x x是相互独立的,所以为了长度最大,我们只需选择一对中的一个即可。
注意先标记 v i s [ 0 ] = 1 vis[0]=1 vis[0]=1
int n,x;
bitset<1<<18>vis;
vector<int>v({0});
int main(){
scanf("%d%d",&n,&x);
int m=1<<n;vis[0]=1;
for(int i=1;i<m;i++){
if(vis[i^x]) continue;
vis[i]=1;
v.pb(i);
}
m=SZ(v);printf("%d\n",m-1);
for(int i=1;i<m;i++) printf("%d ",v[i]^v[i-1]);
return 0;
}