题解:P5657 [CSP-S2019] 格雷码

· · 题解

思路

我们知道: G(k) = k \oplus \left( \frac{k}{2} \right) ,用位运算表示就是 k^(k>>1)

注意:

代码

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
vector<int> v;
int main(){
    int n;
    cin>>n;
    ULL k;
    cin>>k;
    ULL t = k^(k>>1);
    for(int i=0;i<n;i++){
        v.push_back((t&1)?1:0);
        t>>=1;
    }
    for(int i=v.size()-1;i>=0;i--){
        cout<<v[i];
    }
    return 0;
}