CodeForces 1174D Ehabと期待XOR問題

問題の意味:
2つの数値を与えられ\(\ N-)及び(X \)\は、設定配列を構築\([L] \) \(Lの\)不確定)
\(1 \) \ (1 \のLeq A [I] <2 ^ {N-} \)
\(2 \) 配列XORの配列からとする(0 \)を\または\(X \)
\(3 \)、\ ( Lの\)が最大であるべきである
:分析
\ \(1)の前に配置され、\(Iは\)数字との排他的論理和され(sum_ {I}を\)\、次いで、([I、J] \ \ ) 排他的論理和のそしてため\(sum_ {I} 1-⨁sum_{J} \) 私たちは見つけることができる\(SUM \)アレイ、満足

\ [\ FORALL I、J、sum_ {I} \ oplus sum_ {J} \ NEQ 0 \&\&sum_ {I} \ oplus sum_ {J} \ NEQ X \]

\(2 \) 異なる特性または有する\を(y⨁z= X \) そこ(y⨁x= Z \)\、および任意の番号\(Y \)、\ (Zは\)のみですA。それ以来\(Y \)\(Z \)バイナリ超えにくい(2 ^ {N} \ \し ) 、その結果、とは対照的に、\(Y \)\(Z \)\( 2 ^ {N} \)内のペアで、設定\(Iは\)から(1 \)\横断\(2 ^ {N} \) 我々はだろう(私は\)\トークン即ち多数の反対することができ、私たちを得ることができます\(SUM \)配列
\(。3 \)、\ ([I] = SUM [I]⨁sum[-I。1] \)出力配列に、

#pragma GCC optimize(3, "Ofast", "inline")

#include <bits/stdc++.h>

#define start ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
#define int ll
#define ls st<<1
#define rs st<<1|1
#define pii pair<int,int>
using namespace std;
const int maxn = (ll) 5e5 + 5;
const int mod = 1000000007;
const int mod2 = 1000000006;
const int inf = (ll) 1e9 + 5;
bool vis[maxn];

signed main() {
    start;
    int n, x;
    cin >> n >> x;
    vis[x] = vis[0] = true;
    vector<int> ans;
    ans.push_back(0);
    for (int i = 1; i < (1 << n); ++i)
        if (!vis[i]) {
            ans.push_back(i);
            vis[i ^ x] = true;
        }
    cout << ans.size() - 1 << '\n';
    for (int i = 1; i < ans.size(); ++i)
        cout << (ans[i - 1] ^ ans[i]) << ' ';
    return 0;
}

おすすめ

転載: www.cnblogs.com/F-Mu/p/11609577.html