zoukankan      html  css  js  c++  java
  • 线性基学习

    首先板子

    const int L = 63;
    ll d[L];
    bool add(ll x)
    {
        for(int i = L - 1; i >= 0; i--)
            if(x & 1ll << i)
            {
                if(d[i] == -1)
                {
                    d[i] = x;
                    return true;
                }
                x ^= d[i];
            }
        return false;
    }

    线性基的规模就是你二进制的位数

    如果要判断两个线性基的值域相同 只需要依次插入值就好了 详见agc045 A题解  链接:https://www.cnblogs.com/acmLLF/p/13636575.html

    线性基的第L个元素,最高位一定是第L位,且为1

    所以要是取最大值,依次从大到小取max异或就行了,因为后面不会覆盖前面的最高位,但有可能覆盖低位,所以取个max就行了

    最小值直接取线性基中最小值  特殊处理0,注意 因为线性基的值域 一定不包含0

    查询是否存在于此基的值域中,取此数二进制下每一位,依次从大到小异或,若为1,则异或,若0,则下一位继续 

    若异或的最终答案是0,那么存在

  • 相关阅读:
    sql server紧急状态下登录脚本
    将SQL for xml path('')中转义的字符正常显示
    SQL查询表中的有那些索引
    Set ARITHABORT Option设置为ON
    检测重编译
    计划指南
    sql server 清理缓存
    变量绑定
    分析及动态采样
    Hint
  • 原文地址:https://www.cnblogs.com/acmLLF/p/13639287.html
Copyright © 2011-2022 走看看