月赛求助Div2C, WA #19
查看原帖
月赛求助Div2C, WA #19
119965
Maaaaarrrrriiiiio楼主2021/11/13 18:44

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;
}
2021/11/13 18:44
加载中...