首页 > 其他 > 详细

【模板】线性基求交

时间:2019-10-05 21:22:18      阅读:111      评论:0      收藏:0      [点我收藏+]

线性基求交

struct lb{
    ll p[63];
    lb(){
        memset(p,0,sizeof(p));
    }
    void clear(){
        memset(p,0,sizeof(p));
    }
    void ins(ll x){
        for(int i=60;i>=0;i--) if((x>>i)&1){
            if(!p[i]){
                p[i]=x;
                return;
            }else x^=p[i];
        }
    }
};
lb merge(lb a,lb b){
    lb g=lb(),tmp=a;
    ll cur,d;
    for(int i=0;i<=60;i++) if(b.p[i]){
        cur=0,d=b.p[i];
        for(int j=i;j>=0;j--) if(d>>j&1){
            if(tmp.p[j]){
                d^=tmp.p[j],cur^=a.p[j];
                if(d) continue;
                g.p[i]=cur;
            }else tmp.p[j]=d,a.p[j]=cur;
            break;
        }
    }
    return g;
}

【模板】线性基求交

原文:https://www.cnblogs.com/xyq0220/p/11625761.html

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