首页 > 其他 > 详细

线性基

时间:2019-09-25 22:05:01      阅读:103      评论:0      收藏:0      [点我收藏+]

 

 

P3857 [TJOI2008]彩灯

题意:给定n个数字  问最多能异或出多少个数字

题解:  只需要计算出线性基能插入多少个基底即可  基底选与不选  所以答案为 2^基底数量

技术分享图片
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define ll long long
#define see(x) (cerr<<(#x)<<‘=‘<<(x)<<endl)
#define inf 0x3f3f3f3f
#define CLR(A,v)  memset(A,v,sizeof A)
/////////////////////////////////////
const int N=1e5+10;
char s[N];
ll n,m,p[N],cnt;
void upnode(ll x)
{
    repp(i,50,0)if((x>>i&1))
    {
        if(!p[i])
        {
            p[i]=x;cnt++;
            break;
        }
        x^=p[i];
    }
}
int main()
{
    cin>>n>>m;
    rep(i,1,m)
    {
        scanf("%s",s+1);
        ll x=0;
        rep(i,1,n)
        x=(x<<1ll)+(s[i]==O);
        upnode(x);
    }
    cout<<(1ll<<cnt)%(1ll*2008);
    return 0;
}
View Code

 

线性基

原文:https://www.cnblogs.com/bxd123/p/11587598.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!