最后一个点超时求助
查看原帖
最后一个点超时求助
169844
w2321楼主2020/8/25 21:22
#include<cstdio>
#define int unsigned long long
#define ri register int
int a[65];
int pow(int x)
{
	ri ans=1;
	while(x--) ans*=2;
	return ans;
}
int GrayCode(int n,int k)
{
	if(n==1&&k==1) return 0;
	if(n==1&&k==2) return 1;
	ri tmp=pow(n-1);
	if(k<=tmp) return GrayCode(n-1,k);
	else return GrayCode(n-1,2*tmp-k+1)+tmp;
}
signed main()
{
	ri n,k;
	scanf("%llu%llu",&n,&k);
	ri ans=GrayCode(n,k+1),cnt=1;
	while(ans)
	{
		a[cnt]=ans%2;
		cnt++;
		ans>>=1;
	}
	for(ri i=n;i>=1;--i) printf("%llu",a[i]);
	return 0;
}
2020/8/25 21:22
加载中...