题目题意

给一个长度为2的n次方的排列,要求找到一组保证相邻两项异或值之和最小,并输出结果。

题目知识点

构造、位运算

题目分析

题目中提到的相邻两项异或值最小,本质是让相邻两个数的二进制差异最小,这个与格雷码中相邻两个数的二进制只有一位不同一致,所以其构造逻辑与格雷码相同,代码如下:

#include<bits/stdc++.h>
using namespace std;
void solve(){
    int n;
    cin>>n;
    long long t=pow(2,n);
    for(int i=0;i<t;i++){
        cout<<(i^(i>>1))<<" ";   //格雷码本质
    }
}
int main(){
    int t=1;
    while(t--){
        solve();
    }
}