线性基模板题
n个数,取几个数使得它们的异或和最大
所以哪错了
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 50 + 10;
ll n,ans,kk[N];
ll p[N],a[N];
void Insert(ll x){
for(int i = N; i >= 0; i--){
if(!(x & kk[i])) continue;
if(!p[i]){
p[i] = x;
break;
}
x ^= p[i];
}
}
int main(){
scanf("%lld",&n);
kk[0] = 1;
for(int i = 1; i <= N; i++){
kk[i] = kk[i - 1] * 2;
}
for(int i = 1; i <= n; i++){
scanf("%lld",&a[i]);
Insert(a[i]);
}
for(int i = N; i >= 0; i--){
if((ans ^ p[i]) > ans) ans = ans ^ p[i];
}
printf("%lld",ans);
return 0;
}
全部WA掉,但我抽了前两个数据点,答案是对的