题目链接 :https://ac.nowcoder.com/acm/contest/31
因为数的范围是3000那么运用高斯消元消完以后最多还有15个数
#include <iostream>
typedef long long ll;
using namespace std;
const ll maxn = 1e5 + 7;
ll a[maxn];
ll b[maxn];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
ll n;
cin >> n;
for(int i = 1; i <= n; i ++)
{
cin >> a[i];
}
ll w = 1;
for(int i = 2; i <= n - 1; i ++)
{
if(a[i] < a[1] && a[i] > a[n])
{
b[w ++] = a[i];
}
}
if(n == 1)cout << (a[1] ? a[1] : -1) << endl;
else if(a[1] <= a[n])cout << -1 << endl;
else
{
//高斯消元
ll k = 1;
for(int i = 14; i >= 0; i --)
{
for(int j = k; j < w; j ++)
{
if(b[j] >> i & 1)//定位判断
{
swap(b[j],b[k]);
break;
}
}
if(b[k] >> i & 1)
{
for(int j = k + 1; j < w; j ++)
{
if(b[j] >> i & 1)
{
b[j] ^= b[k];
}
}
k++;
}
}
//贪心的选择十五个数
ll res = a[1] ^ a[n];
k = 1;
for(int i = 14; i >= 0; i --)
{
if(b[k] >> i & 1)
{
if(!(res >> i & 1))res ^= b[k];
k++;
}
}
if(res == 0)cout << -1 << endl;
else cout << res << endl;
}
return 0;
}