首页 > 其他 > 详细

线性基模板题

时间:2020-07-23 15:19:09      阅读:58      评论:0      收藏:0      [点我收藏+]

题目描述

给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。

输入格式

第一行一个数n,表示元素个数

接下来一行n个数

输出格式

仅一行,表示答案。

输入输出样例

输入 #1
2
1 1
输出 #1
1

说明/提示

1 \leq n \leq 50, 0 \leq S_i \leq 2 ^ {50}1n50,0Si?250

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN = 64;
LL num[MAXN], n;
int insert(LL x) {
    for (int i = 63; i >= 0; i--) {
        if ((x >> i) & 1) {
            if (!num[i]) {
                num[i] = x;
                return 1;
            }
            x ^= num[i];
        }
    }
    return 0;
}
LL query() {
    LL ans = 0;
    for (int i = 63; i >= 0; i--) {
        if ((ans ^ num[i]) > ans) {
            ans ^= num[i];
        }
    }
    return ans;
}
int main() {
    LL x;
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> x, insert(x);
    cout << query() << endl;
    return 0;
}

线性基模板题

原文:https://www.cnblogs.com/HighLights/p/13364424.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!