1 条题解

  • 0
    @ 2025-3-17 13:14:25
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll, LL;
    #define pb push_back
    
    vector<int> dc;
    
    void solve() {
        int n;
        cin >> n;
        // if(n == 1) cout << 0;
        // else {
            int a = dc[int(log2(n - 1))];
            for(int i = n - 1; i > 0; i--) {
                if(i > a) cout << i << ' ';
                else if(i == a) cout << a << ' ' << 0 << ' ';
                else cout << i << ' ';
            }
        // }
        
    
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
    
        dc.pb(1);
        for(int i = 0; i <= log2(3e5); i++) {
            dc.pb(dc[i] * 2);
        }
    
        int t = 1;
        // cin >> t;
        while(t--) {
            solve();
        }
    
        return 0;
    }
    // 0和任何数xor都是数本身
    // 1   2   3   4   5    6    7    8    9    10   11   12   13  
    // 1  10  11  100 101  110  111  1000 1001 1010 1011 1100 1101 
    // 观察规律,分成2、 4、 8、 16等档次,
    // 0与档次数放一起,最高档次数内放一起,靠边放,可保证最大xor结果一定为最高档次位
    
    • 1

    信息

    ID
    1655
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    提交数
    25
    已通过
    8
    上传者