题目背景
这是一道模板题。
题目描述
给定 n 个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
输入格式
第一行一个数 n,表示元素个数
接下来一行 n个数
输出格式
仅一行,表示答案。
输入输出样例
输入 #1复制
2 1 1
输出 #1复制
1
#include<bits/stdc++.h>
using namespace std;
#define sc(x) scanf("%d",&x)
#define sl(x) scanf("%lld",&x)
#define ll long long
#define pb push_back
typedef pair<int,int>PII;
const int Max=1e7+5;
const ll INF=1e15+5;
const ll mod=998244353;
ll a[Max];
void insert(ll x){
for(int i=60;i>=0;i--){
if((x>>i)&1ll){//1ll是将1强制转换成long long类型
if(!a[i]){
a[i]=x;
break;
}else x^=a[i];
}
}
}
int main(){
int n;
sc(n);
for(int i=0;i<n;i++){
ll k;sl(k);
insert(k);
}
ll maxa=0;
for(int i=60;i>=0;i--){
if((maxa^a[i])>maxa){
maxa^=a[i];
}
}
printf("%lld\n",maxa);
}