luogu P3812 【模板】线性基
题目背景
这是一道模板题。
题目描述
给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
输入输出格式
输入格式:
第一行一个数n,表示元素个数
接下来一行n个数
输出格式:
仅一行,表示答案。
输入输出样例
说明
1≤n≤50,0≤Si≤250
链接:https://www.luogu.org/problemnew/show/3812
AC代码:
#include<cstdio> #include<iostream> #define BIG 133333 #define FOR(i,s,t) for(register int i=s;i<=t;++i) typedef long long ll; ll u,ans; int n; ll b[70]; int main(){ scanf("%d",&n); while(n--){ scanf("%lld",&u); for(register int i=60;~i;--i) if(u&(1ll<<i)){ if(!b[i]){ b[i]=u; break; } else u^=1ll*b[i]; } } for(register int i=60;~i;--i) if((ans^b[i])>ans)ans^=b[i]; printf("%lld ",ans); return 0; }