学了下线性基
使用好像并不复杂
打了板子
但是要注意位运算优先级
#include <cstdio> #include <algorithm> #include <cstring> #define int long long using namespace std; const int MAX_BASE=(long long)63; int base[64],a[60],n; void getbase(void){ for(int i=1;i<=n;i++){ for(int j=MAX_BASE;j>=0;j--){ if(a[i]>>j){ if(!base[j]){ base[j]=a[i]; break; } a[i]^=base[j]; } } } } int ans=0; void query(void){ for(int i=MAX_BASE;i>=0;i--) if((base[i]^ans)>ans) ans=base[i]^ans; } signed main(){ freopen("testdata (1).in","r",stdin); scanf("%lld",&n); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); getbase(); query(); printf("%lld\n",ans); }