元素

传送门:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <iostream>
#include <queue>
#include <bitset>
#include <cmath>
using namespace std;
#define ll long long
#define re register
#define fi first
#define se second
const int N=1e6+10;
inline void read(int &a)
{
    a=0;
    int d=1;
    char ch;
    while(ch=getchar(),ch>'9'||ch<'0')
        if(ch=='-')
            d=-1;
    a=ch^48;
    while(ch=getchar(),ch>='0'&&ch<='9')
        a=(a<<3)+(a<<1)+(ch^48);
    a*=d;
}
inline void write(int x)
{
    if(x<0)
        putchar(45),x=-x;
    if(x>9)
        write(x/10);
    putchar(x%10+'0');
}
ll a[65];
struct note
{
    ll x;
    int y;
    friend bool operator < (note a,note b){return a.y>b.y;}
}q[1005];
inline bool add(ll x)
{
    for(re int i=62;i>=0;i--)
        if(x&(1ll<<i))
        {
            if(!a[i])
            {
                a[i]=x;
                break;
            }
            x^=a[i];
        }
    return x>0;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(re int i=1;i<=n;i++)
        scanf("%lld %d",&q[i].x,&q[i].y);
    sort(q+1,q+1+n);
    int ans=0;
    for(re int i=1;i<=n;i++)
        ans+=q[i].y*add(q[i].x);
    printf("%d
",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/acm1ruoji/p/11289482.html