码迷,mamicode.com
首页 > 其他好文 > 详细

【模板】线性基

时间:2019-09-27 20:54:55      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:long   out   class   asi   tor   i++   ace   ios   typedef   

线性基主要用于解决子集异或问题。

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

struct linear_basis {
    vector<LL> s;
    int n, zero;
    linear_basis(int _n) {
        n = _n;
        s.resize(n + 1);
        zero = 0;
    }
    void insert(LL x) {
        for (int i = n; i >= 0; i--) {
            if (x >> i & 1) {
                if (s[i] != 0) {
                    x ^= s[i];
                } else {
                    s[i] = x;
                    return;
                }
            }
        }
        zero = 1;
    }
    LL query_max() {
        LL ret = 0;
        for (int i = n; i >= 0; i--) {
            if (ret < (ret ^ s[i])) {
                ret ^= s[i];
            }
        }
        return ret;
    }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int n;
    cin >> n;
    linear_basis s(51);
    for (int i = 0; i < n; i++) {
        LL x;
        cin >> x;
        s.insert(x);
    }
    cout << s.query_max() << endl;
    return 0;
} 

【模板】线性基

标签:long   out   class   asi   tor   i++   ace   ios   typedef   

原文地址:https://www.cnblogs.com/wzj-xhjbk/p/11600196.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!