luogu P3812 【模板】线性基
题目背景
这是一道模板题。
题目描述
给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
输入输出格式
输入格式:
第一行一个数n,表示元素个数
接下来一行n个数
输出格式:
仅一行,表示答案。
输入输出样例
输入样例#1: 复制
2 1 1
输出样例#1: 复制
1
说明
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\n",ans); return 0; }
时间: 2024-11-12 13:54:33