1. [2019 CCF CSP-S2-Day1]格雷#include<bits/stdc++.h>#include<vector>
#define maxn 1010
using namespace std;
int n;
unsigned long long k;
string graycode(int n,unsigned long long k)//k的范围[0,2^n)
{
if(n==1)//递归终止
{
if(k==0) return "0";
else return "1";
}
//位运算 2^n就是将1左移n位
//同理得2^n-1就是将1左移n位
// 2^n的一半就是2^n-1
unsigned long long mid=((unsigned long long)1)<<(n-1);//注意1被默认为int.左移会越界,要将1强制转化成无符号整型
//递归
if(k<mid) return "0"+graycode(n-1,k);
else return "1"+graycode(n-1,2*mid-k-1);
}
int main()
{
cin>>n>>k;
cout<<graycode(n,k)<<endl;
return 0;
}