[数学] CF 1174D - Ehabと期待XOR問題

著作権ます。https://blog.csdn.net/qq_40831340歓迎論文https://blog.csdn.net/qq_40831340/article/details/90769180

codeforces
1174D - Ehabと期待XOR問題

イタリアは、
彼または任意の他のサブセグメント値が排他的でないことができるようにあなたは、列Aの数を構築することができず、X 0である
彼の最長を作ると同時に、

ここでは、優先プレフィックスA XOR B及び列数構成される列数考慮
し、[I] = B [I ] ^ B [I - 1]。

私たちは、最初に、可能な限り長くする場合はいるかのように0とxが表示されないながら検討し
、それは私だけ^ Xを選択するのが最善であるときに我々は、列Bの数を構築し、私際XOR我々が表示されないことを保証のみ1 X

我々は、データの半分のみがこの最後の排他的論理和から選択ほど最長L 2 ^(N-1)の内部にあることができるので

それぞれに隣接する異なるBがあるのでとても自然に0を表示されません。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fastio ios::sync_with_stdio(false);cin.tie(0)
const int maxn = 2e5 + 5;

int n, x;

bool vis[1 << 18];

signed main() {
    fastio;
    cin >> n >> x;
    int pre = 0;
    vector<int> ans;
    vis[x] = 1; // x 不能出现
    ans.push_back(0);
    for(int i = 1; i < (1 << n); i ++) {
        if(vis[i])
            continue;

        vis[i] = vis[i ^ x] = 1; // 优先选取 成对出现的一个
        ans.push_back(i); // 现在构成 a的前缀异或和数组
    } // 那样 a[i] = b[i + 1] ^ b[i];

    cout << ans.size() - 1 << endl;

    for(int i = 1; i < ans.size(); i ++) {
        cout << (ans[i] ^ ans[i - 1]) << " ";
    }cout << endl;
    return 0;
}

おすすめ

転載: blog.csdn.net/qq_40831340/article/details/90769180