思路
考场上的递归思路
每次向下递归的时候判断是左半边还是右半边即可
注意向右半边递归之后下一层序列要反转过来即可
代码
#include <cstdio> #include <algorithm> #include <cstring> #include <iostream> using namespace std; void solve(unsigned long long n,unsigned long long k,unsigned long long rev=0){ if(rev) k=((1ULL<<(n))-1)-k; // cout<<n<<' '<<k<<' '<<rev<<endl<<endl; if(n==1){ if(k==0) printf("0"); else printf("1"); return; } if(k>((1ULL<<(n-1))-1)){ printf("1"); solve(n-1,k-((1ULL<<(n-1))),1); } else{ printf("0"); solve(n-1,k,0); } } unsigned long long n,k; int main(){ cin>>n>>k; solve(n,k); return 0; }