1152. 格雷码
几个对爆LL,ULL的处理
长度为n的格雷码的编码范围为\([0, 2^n - 1]\), 它的中间点是长度为n - 1的格雷码的最后一个编码的编号\(2^{n - 1} - 1\)
#include<iostream>
#include<bitset>
using namespace std;
#define ULL unsigned long long
int n;
ULL k;
string dfs(int n, ULL k){
if(n == 1) return k ? "1" : "0";
ULL mid = ((ULL) 1 << n - 1) - 1;
if(k > mid){
ULL p = k - mid;
return "1" + dfs(n - 1, mid + 1 - p);
}else
return "0" + dfs(n - 1, k);
}
int main(){
cin >> n >> k;
cout << dfs(n, k);
// for(int i = n - 1; i >= 0; i --) cout << ((res >> i) & 1);
}