LibreOJ #113. 最大異或和
阿新 • • 發佈:2017-07-23
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. 最大異或和