100->55
原地裂开
大佬救我
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ll long long
#define ri register int
#define rll register long long
ll pow2[23]={0};
int n,k;
int ans[4000001]={0};
bool vis[4000001]={0};
int main()
{
pow2[0]=1;
for(ri i=1;i<=23;i++)pow2[i]=pow2[i-1]*2;
scanf("%d%d",&n,&k);
rll res=0;
vis[0]=1;
ans[0]=0;
if(n==1&&k==1)
{
printf("1\n0 1");
return 0;
}
if(n==0)
{
printf("1\n0");
return 0;
}
if(k>=n)
{
printf("0");
return 0;
}
for(ri i=1;i<pow2[n];i++)
{
ri ii=i,off=0;
while(ii%2==0)
{
off++;
ii/=2;
}
for(ri j=off;j<=off+k-1;j++)
res^=(pow2[(j+n)%n]);
if(vis[res])
{
printf("0");
return 0;
}
ans[i]=res;
vis[res]=1;
}
printf("1\n");
for(ri i=0;i<pow2[n];i++)
printf("%d ",ans[i]);
return 0;
}