求线性基

#include<bits/stdc++.h>
#define reg register
using namespace std;
typedef long long ll;
const int MN=60;
ll a[61],tmp[61];
bool flag;
void ins(ll x)
{
    for(reg int i=MN; ~i; i--)
        if(x&(1ll<<i))
            if(!a[i])
            {
                a[i]=x;
                return;
            }
            else
                x^=a[i];
    flag=true;
}
bool check(ll x)
{
    for(reg int i=MN; ~i; i--)
        if(x&(1ll<<i))
            if(!a[i])
                return false;
            else
                x^=a[i];
    return true;
}
ll qmax(ll res=0)
{
    for(reg int i=MN; ~i; i--)
        res=max(res,res^a[i]);
    return res;
}
ll qmin()
{
    if(flag)
        return 0;
    for(reg int i=0; i<=MN; i++)
        if(a[i])
            return a[i];
}
ll query(ll k)
{
    reg ll res=0;
    reg int cnt=0;
    k-=flag;
    if(!k)
        return 0;
    for(reg int i=0; i<=MN; i++)
    {
        for(int j=i-1; ~j; j--)
            if(a[i]&(1ll<<j))
                a[i]^=a[j];
        if(a[i])
            tmp[cnt++]=a[i];
    }
    if(k>=(1ll<<cnt))
        return -1;
    for(reg int i=0; i<cnt; i++)
        if(k&(1ll<<i))
            res^=tmp[i];
    return res;
}
int main()
{
    int n;
    ll x;
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
        scanf("%lld",&x),ins(x);
    printf("%lld\n",qmax());
    return 0;
}

 

上一篇:P3288-[SCOI2014]方伯伯运椰子【0/1分数规划,负环】


下一篇:[BZOJ3622]已经没有什么好害怕的了