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);
}
原文地址:https://www.cnblogs.com/tomori/p/13756295.html