• LibreOJ #113. 最大异或和


    二次联通门 : LibreOJ #113. 最大异或和

    /*
        LibreOJ #113. 最大异或和
        
        线性基
         
        插入 与 查询最大值
        
        说一下我在学习线性基时遇到的一些问题
        
        1.线性基指的是一个数集
        2.。。。没了。
        
        一开始反复看了好几遍,不知道线性基是个什么东西
        后来突然明白是个数集而不是个操作什么的。。 
        
        突然不能用printf了。。。用printf输出就是负数。。
        只能用cout了。。 
    */
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    
    inline void read (long long &now)
    {
        register char word = getchar ();
        bool temp = false;
        for (now = 0; word < '0' || word > '9'; word = getchar ())
            if (word == '-')
                temp = true;
        for (; word >= '0' && word <= '9'; now = now * 10 + word - '0', word = getchar ());
        if (temp)
            now = -now;
    }
    
    
    class Linear_Base_Type
    {
        
        static const int _L = 62;
        
        private :
            
            long long number[_L | 1];
            
        public :
            
            inline bool Insert (register long long key)
            {
                for (register int i = _L; i >= 0; i --)
                    if (key & (1LL << i))
                    {
                        if (!number[i])
                        {
                            number[i] = key;
                            break;
                        }
                        key ^= number[i];
                    }
                return key > 0;
            }
            
            long long Query_Maxn ()
            {
                long long res = 0;
                
                for (register int i = _L; i >= 0; i --)
                    res = ((res ^ number[i]) > res) ? (res ^ number[i]) : res;
                    
                return res;
            }
    };
    
    Linear_Base_Type Make;
    
    int main (int argc, char *argv[])
    {
        long long N;
        read (N);
        long long x;
        
        for (register int i = 1; i <= N; i ++)
        {
            read (x);
            
            Make.Insert (x); 
        }
        std :: ios :: sync_with_stdio (false);
        std :: cout << Make.Query_Maxn ();
        
        return 0;
    }
  • 相关阅读:
    cdoj1325卿学姐与基本法
    HUAS 1476 不等数列(DP)
    BZOJ 1818 内部白点(离散化+树状数组)
    BZOJ 1816 扑克牌(二分)
    BZOJ 1801 中国象棋(DP)
    BZOJ 1791 岛屿(环套树+单调队列DP)
    BZOJ 1797 最小割(最小割割边唯一性判定)
    BZOJ 1789 Y形项链(思维)
    BZOJ 1787 紧急集合(LCA)
    BZOJ 1786 配对(DP)
  • 原文地址:https://www.cnblogs.com/ZlycerQan/p/7223559.html
Copyright © 2020-2023  润新知