http://codeforces.com/contest/1174/problem/D
这题是前缀异或和,具体看官方题解:http://codeforces.com/blog/entry/67388
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxN=(1<<18)+5;
int N,x,vis[maxN],b[maxN],tol;
int main()
{
cin>>N>>x;
int p=1<<N;
vis[0]=1;
for(int i=1;i<p;i++)
{
if(vis[i^x])continue;//如果i^x出现过,这个数和当前数^得到x
b[++tol]=i;
vis[i]=1;
}
printf("%d\n",tol);
for(int i=1;i<=tol;i++)printf("%d ",b[i]^b[i-1]);
return 0;
}