【模板】線性基(洛谷P3812)
阿新 • • 發佈:2018-11-08
size for 最大 個數 cstring 異或 namespace 元素 線性
Description
給定\(n\)個整數(數字可能重復),求在這些數中選取任意個,使得他們的異或和最大。
Input
第一行一個數\(n\),表示元素個數
接下來一行\(n\)個數
Output
僅一行,表示答案。
Solution
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; int n; long long x,p[60]; void insert(long long x) { for (int i=50;i>=0;i--) { if ((x>>i)&1) { if (!p[i]) { p[i]=x; break; } else x^=p[i]; } } } int main() { scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%lld",&x); insert(x); } long long ans=0; for (int i=50;i>=0;i--) if ((ans^p[i])>ans) ans^=p[i]; printf("%lld\n",ans); return 0; }
【模板】線性基(洛谷P3812)