AtCoder Beginner Contest 236 F题,用线性基做但只对了四个点
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct node{
int id,num;
}a[1<<16];
int n;
int d[55*3];
ll sum=0;
bool cmp(node a,node b){
return a.num<b.num;
}
bool add(int x){
for(int i=62;i>=0;i--){
if(x&(1ll<<i)){
if(d[i])x^=d[i];
else{
d[i]=x;
return 1;
}
}
}
return 0;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n*n-1;i++)scanf("%d",&a[i].num),a[i].id=i;
sort(a+1,a+n*n,cmp);
for(int i=1;i<=n*n-1;i++){
if(add(a[i].id)){
sum+=a[i].num;
}
}
printf("%lld",sum);
return 0;
}
有dalao帮忙找一下问题吗,谢谢