前言
思路
因为没注意范围 1 e 18 1e18 1e18,循环任然用 55 55 55然后就 W A WA WA了
这题和上一题一样,同样使用了线性基排除了集合中异或和为 0 0 0的情况
然后再贪心的从大到小排序即可
MyCode
const int N = 1e5+10;
ll p[N];
ll ans;
bool XXJ(ll x){
for(int i = 62;i>=0;i -- ){
if(!(x>>i)) continue;
if(!p[i]){
p[i] = x;
return true;
}
x ^=p[i];
}
return false;
}
void solve()
{
int n;cin>>n;
vector<pll> a(n);
for(int i=1;i<=n;i++){
ll number , val;
cin>>number>>val;
a.pb({val,number});
}
sort(all(a),greater<pll>());
for(int i=0;i<n;i++){
if(XXJ(a[i].y))
ans+=a[i].x;
}
cout<<ans<<endl;
}