D. Ehab and the Expected XOR Problem(Constructive & Xor)

因为区间限制,考虑构造异或前缀和数组。

需要满足

b l − 1 ⊕ b r ≠ 0 b_{l-1}\oplus b_r \ne 0 bl1br=0

b l − 1 ⊕ b r ≠ x b_{l-1}\oplus b_r \ne x bl1br=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;
}