我们需要^出一个最大值,那么我们能够造的最大值,应该是最大的数写成二进制之后全填上1,但是我们不能保证每一位都是1
所以我们可以处理处使这一二进制位为1的数,然后枚举每一位^
代码
//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=100;
long long int n;
long long int a[M];
long long int b[M];
long long int ans;
int main()
{
cin>>n;
for (int i=1;i<=n;i++) cin>>a[i];
for (int i=1;i<=n;i++)
{
for (int k=60;~k;k--)
if (a[i]&(1LL << k))//a[i]中包含该二进制位
{
if (!b[k]) {b[k]=a[i];break;}//判断之前是不是可以^到当前二进制位,不能则可以通过a[i]弄到
else a[i]^=b[k]; //之前可以弄,那么将a[i]中与之前重叠的部分^掉,然后考虑低位
}
}
for (int i=60;~i;i--)
if ((ans^b[i]) > ans) ans^=b[i];
cout<<ans;
return 0;
}