P5657 格雷码
找规律,非常简单。
(然而蒟蒻被边界条件搞炸了)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
unsigned long long k;
int n;
unsigned long long a=1;
int main(){
scanf("%d%llud",&n,&k);
if(n==64)
a=18446744073709551616ull;
else
for(int i=n;i;--i){
a*=(unsigned long long)2;
}
a-=1;
while(a!=1){
if(k<=(a/2)){
printf("0");
a=a/2;
}else{
printf("1");
k=a-k;
a=a/2;
}
}
if(k==1)
printf("1");
else
printf("0");
return 0;
}