【模板】线性基
题目描述
给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
输入输出格式
输入格式:
第一行一个数n,表示元素个数
接下来一行n个数
输出格式:
仅一行,表示答案。
输入输出样例
说明
1≤n≤50,0≤Si≤2^50
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll a[100010], b[70];
ll n, ans=0;
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
for (int i = 0; i <n; i++)
for (int j = 62; j >= 0; j--)
if (1ll << j & a[i])
if (!b[j]) {
b[j] = a[i];
break;
}
else
a[i] ^= b[j];
for (int i = 62; i >= 0; i--)
ans = max(ans, ans^b[i]);
cout << ans << endl;
return 0;
}
//c++ max函数头文件是#include<algorithm>

浙公网安备 33010602011771号