码迷,mamicode.com
首页 > 其他好文 > 详细

luogu P3812 【模板】线性基

时间:2020-06-10 22:58:03      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:std   space   --   main   har   ++   个数   输入   格式   

题目描述

给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。

输入格式

第一行一个数n,表示元素个数

接下来一行n个数

输出格式

仅一行,表示答案。

#include<cstdio>
using namespace std;
#define ll long long
ll a[51],p[101],ans;
inline ll read(){
    ll x = 0, f = 1; char ch = getchar();
    while(ch > ‘9‘ || ch < ‘0‘){ if(ch == ‘-‘)f = -1; ch = getchar(); }
    while(ch >= ‘0‘ && ch <= ‘9‘){ x = x * 10 + ch - ‘0‘; ch = getchar(); }
    return x * f;
}
signed main(){
	int n=read();
	for(int i=1;i<=n;i++) {
		a[i]=read();
    	for(int j=62;j>=0;j--){
			if(!(a[i]>>j))continue;
			if(!p[j]){ p[j]=a[i]; break; }
			a[i]^=p[j];
		}
	}
	for(int i=62;i>=0;i--)if((ans^p[i])>ans)ans=ans^p[i];
	printf("%lld",ans);
}

luogu P3812 【模板】线性基

标签:std   space   --   main   har   ++   个数   输入   格式   

原文地址:https://www.cnblogs.com/naruto-mzx/p/13089759.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!