1. 程式人生 > >LibreOJ #113. 最大異或和

LibreOJ #113. 最大異或和

getch logs target true main getchar () char pan

二次聯通門 : 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; }

LibreOJ #113. 最大異或和