题目描述
给定 n 个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
输入格式
第一行一个数 n,表示元素个数
接下来一行 n 个数
输出格式
仅一行,表示答案。
输入输出样例
输入
2
1 1
输出
1
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll d[65], x;
int n;
void add(ll x) // 插入线性基
{
for(int i = 60; i >= 0; i--){
if(x & (1ll << i)){
if(d[i])
x ^= d[i];
else{
d[i] = x;
break;
}
}
}
}
ll qmax() // 查询异或最大值
{
ll ans = 0;
for(int i = 60; i >= 0; i--)
ans = max(ans, ans ^ d[i]);
return ans;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++){
cin >> x;
add(x);
}
cout << qmax() << endl;
return 0;
}