[板子] 線性基
阿新 • • 發佈:2020-08-24
這題讓我發現二進位制運算子對格式的嚴格
比如
if (now & (1LL << j))
if (now & (1LL << j) == 1)
在\(now & (1LL << j)\)只可能為1或0的情況下,這兩個程式碼竟然表示的意思不一樣!
還有
(ans ^ a[i]) > ans
記得打括號!
#include <cstdio> const int N = 60; int n; long long now, ans; long long a[N]; //a陣列為基 int main() { scanf ("%d", &n); for (int i = 1; i <= n; ++i) { scanf ("%lld", &now); for (int j = N; j >= 0; --j) if (now & (1LL << j)) { if (a[j] == 0) { a[j] = now; break; } else now ^= a[j]; } } for (int i = N; i >= 0; --i) if ((ans ^ a[i]) > ans) ans ^= a[i]; printf ("%lld\n", ans); return 0; }