题目描述
给定n个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
输入格式
第一行一个数n,表示元素个数
接下来一行n个数
输出格式
仅一行,表示答案。
输入输出样例
输入 #1
2 1 1
输出 #1
1
说明/提示
1 \leq n \leq 50, 0 \leq S_i \leq 2 ^ {50}1≤n≤50,0≤Si≤250
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int MAXN = 64; LL num[MAXN], n; int insert(LL x) { for (int i = 63; i >= 0; i--) { if ((x >> i) & 1) { if (!num[i]) { num[i] = x; return 1; } x ^= num[i]; } } return 0; } LL query() { LL ans = 0; for (int i = 63; i >= 0; i--) { if ((ans ^ num[i]) > ans) { ans ^= num[i]; } } return ans; } int main() { LL x; cin >> n; for (int i = 1; i <= n; i++) cin >> x, insert(x); cout << query() << endl; return 0; }