列表

详情


NC21298. 牛牛的xor

描述

给你一个n个元素的数组x
你需要找到一个数组a, 0 ≤ a[i] ≤ x[i]
使得a[0] xor a[1]... xor a[n-1]最大
输出这个最大值

输入描述

第一行输入一个整数n (1 ≤ n ≤ 50)
第二行输入n个整数 xi (0 ≤ xi ≤ 1e9)

输出描述

输出一个整数

示例1

输入:

3
2 2 2

输出:

3

示例2

输入:

5
1 2 4 8 16

输出:

31

示例3

输入:

8
7 4 12 33 6 8 3 1

输出:

47

示例4

输入:

1
0

输出:

0

示例5

输入:

2
1024 1024

输出:

2047

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 7ms, 内存消耗: 572K, 提交时间: 2021-08-17 06:00:57

#include<bits/stdc++.h>
using namespace std;
int n,x,ans;
int main() {
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>x;
		int lowbit=0;
		while(x) {
			x-=lowbit=x&-x;
			if(ans&lowbit) ans|=lowbit-1;
			else ans|=lowbit;
		}
	}
	cout<<ans;
	return 0;
}

C 解法, 执行用时: 6ms, 内存消耗: 640K, 提交时间: 2021-08-17 07:00:11

#include<stdio.h>
int main()
{
	int n,x,ans=0;
	scanf("%d",&n);
	while(n--)
	{
	scanf("%d",&x);
	int lowbit=0;
	while(x)
	{
	x-=lowbit=x&-x;
	if(ans&lowbit) ans|=lowbit-1;
	else ans|=lowbit;
	}
	}
	printf("%d",ans);
	return 0;
}

上一题