线性基(模板)

删除回忆录丶 提交于 2019-11-26 17:40:48

这里是连接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<<"\n";

    return 0;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!