线性基(模板)

这里是连接o(´^`)o

线性基性质:

1.原序列里面的任意一个数都可以由线性基里面的一些数异或得到。
2.线性基里面的任意一些数异或起来都不能得到0 0
3.线性基里面的数的个数唯一,并且在保持性质一的前提下,数的个数是最少的

//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<set>
#include<map>
#include<vector>

#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define sl(x) scanf("%lld",&(x))
#define rep(i,a,b) for(int i=a;i<=b;i++)

using namespace std;

int p[105];

void Insert(int now)
{
    per(i,62,0)
    {
        if((now&((ll)1<<i)))
        {
            if(!p[i])
            {
                p[i]=now;
                break;
            }
            now^=p[i];
        }
    }
}

#undef int
int main()
{
#define int long long
    int n;
    sl(n);
    rep(i,1,n)
    {
        int now;
        sl(now);
        Insert(now);
    }
    int ans=0;
    per(i,62,0)
        if((ans^p[i])>ans) ans^=p[i];
    cout<<ans<<"
";

    return 0;
}
原文地址:https://www.cnblogs.com/minun/p/11329469.html