线性基

线性基就是处理异或操作的一系列基向量。
用到了高斯消元的思想维护了一个对角矩阵。

引用了其他dalao博客中的一段话


我们每次维护一个对角矩阵。执行到第 i 步的时候,我们从高到低考虑数 ai为 1 的二进制位j,如果 j 这一行的对角线已经为 1 了,那么我们不能加入,同时为了保持上三角性质,需要将第j 行的行向量异或到 ai;如果 j 这一行的对角线为 0,那么我们就可以将 ai添加到这一行,同时为了维护一个对角矩阵,要先用下面的行消自己,再用自己消上面的行。


for(int i=1; i<=n; i++)
        for(int j=62; j>=0; j--)
        {
            if(a[i] >> j & 1)
            {
                if(b[j]) a[i] ^= b[j];
                else
                {
                    b[j] = a[i];
                    for(int k=j-1; k>=0; k--)
                        if(b[k] && (b[j] >> k & 1)) b[j] ^= b[k];
                    for(int k=j+1; k<=62; k++)
                        if(b[k] >> j & 1) b[k] ^= b[j];
                    break;
                }
            }
        }

b[]数组则是构造出来的线性基

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值