zoukankan      html  css  js  c++  java
  • CodeForces 1174D Ehab and the Expected XOR Problem

    题意:
    给定两个数(n)(x),构造一个序列,设为(a[l])((l)不确定)
    (1)(1leq a[i]<2^{n})
    (2)、序列中没有子序列异或和为(0)(x)
    (3)(l)应最长
    分析:
    (1)、设前(i)个数字异或和为(sum_{i}),则对于([i,j])的异或和为(sum_{i}⨁sum_{j-1}),所以我们可以找出(sum)数组,满足

    [forall i,j,sum_{i}oplus sum_{j} eq 0&&sum_{i}oplus sum_{j} eq x ]

    (2)、异或性质有(y⨁z=x),则有(y⨁x=z),且对于任意一个数(y)(z)是惟一的。且由于(y)(z)在二进制下是不可能超过(2^{n})的,因此,相对立的(y)(z)(2^{n})内成对存在,设(i)(1)开始遍历到(2^{n}),我们与将(i)对立的数标记即可,我们可以得到(sum)数组
    (3)(a[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 << n) - 1; i > 0; --i)
            if (!vis[i]) {
                ans.push_back(i);
                vis[i ^ x] = true;
            }
        cout << ans.size() - 1 << '
    ';
        for (int i = 1; i < ans.size(); ++i)
            cout << (ans[i - 1] ^ ans[i]) << ' ';
        return 0;
    }
    
  • 相关阅读:
    Sequelize框架:
    sequelize 测试
    sequelize 用于PostgreSQL,MySQL,SQLite和MSSQL的Node.js / io.js ORM
    node Util 模块
    bluebird的安装配置
    bluebird 开发文档链接
    Node.js的__dirname,__filename,process.cwd(),./的含义
    editplus
    luogu3377 【模板】左偏树(可并堆)
    cf936c Lock Puzzle
  • 原文地址:https://www.cnblogs.com/F-Mu/p/11609577.html
Copyright © 2011-2022 走看看