首页 > 其他 > 详细

线性基模板

时间:2019-02-06 10:01:51      阅读:181      评论:0      收藏:0      [点我收藏+]

题目描述

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

输入输出格式

输入格式:

 

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

接下来一行n个数

 

输出格式:

 

仅一行,表示答案。

 

输入输出样例

输入样例#1: 复制
2
1 1
输出样例#1: 复制
1

说明

1n50,0Si?2^50

#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll a[100010], b[70];
ll n, ans=0;
int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	for (int i = 0; i <n; i++)
		for (int j = 62; j >= 0; j--)
			if (1ll << j & a[i])
				if (!b[j]) {
					b[j] = a[i];
					break;
				}
				else
					a[i] ^= b[j];
	for (int i = 62; i >= 0; i--)
		ans = max(ans, ans^b[i]);
	cout << ans << endl;
	return 0;
}
//c++ max函数头文件是#include<algorithm>

  

线性基模板

原文:https://www.cnblogs.com/52dxer/p/10353489.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!