T1
题面

解题
- 线性基板子题——构造异或线性基以及求若干个数异或和的最大值。
- CSDN-线性基详解
代码
点击查看代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=55;
ll d[maxn];
void add(ll x)
{
for(int i=50;i>=0&&x;i--)
{
//cout<<x<<endl;
//cout<<i<<" "<<d[i]<<endl;
if(x&(1ll<<i))
{
if(d[i]) x^=d[i];
else {d[i]=x;break;}
}
}
}
int n;
int main()
{
scanf("%d",&n);
while(n--)
{
ll x;scanf("%lld",&x);
add(x);
}
ll ans=0;
for(int i=50;i>=0;i--)
{
//cout<<i<<" "<<d[i]<<endl;
if(ans&(1ll<<i)) continue;
ans^=d[i];
}
printf("%lld",ans);
return 0;
}