题目来源:码蹄集
题目描述:
C++代码实现:
参考链接:https://blog.csdn.net/m0_54754302/article/details/128209412
#include <bits/stdc++.h>
using namespace std;
const int N = 550;
const int inf = 0x3f3f3f3f;
int f[N];
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
memset(f, 0x3f, sizeof f);
f[0] = 0;
int n;
cin >> n;
for (int i = 1, x; i <= n; ++i) {
cin >> x;
for (int j = 0; j < N; ++j) {
if (f[j] < x)
f[j ^ x] = min(f[j ^ x], x);
}
}
vector<int> res;
for (int i = 0; i < N; ++i) {
if (f[i] != inf)
res.push_back(i);
}
cout << res.size() << endl;
for (auto x : res)
cout << x << " ";
return 0;
}
Java代码实现:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
private static final int N = 550;
private static final int INF = 0x3f3f3f3f;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] f = new int[N];
Arrays.fill(f, INF);
f[0] = 0;
int n = scanner.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = scanner.nextInt();
}
for (int x : nums) {
for (int j = 0; j < N; j++) {
if (f[j] < x) {
f[j ^ x] = Math.min(f[j ^ x], x);
}
}
}
List<Integer> res = new ArrayList<>();
for (int i = 0; i < N; i++) {
if (f[i] != INF) {
res.add(i);
}
}
System.out.println(res.size());
for (int x : res) {
System.out.print(x + " ");
}
}
}
Python代码实现(会超时):
N = 550
INF = 0x3f3f3f3f
f = [INF] * N
f[0] = 0
n = int(input())
nums = list(map(int, input().split()))
for x in nums:
for j in range(N):
if f[j] < x:
f[j ^ x] = min(f[j ^ x], x)
res = []
for i in range(N):
if f[i] != INF:
res.append(i)
print(len(res))
print(*res)
代码提交测试结果:
附B站老师讲解链接,可供参考:https://www.bilibili.com/video/BV1ck4y1s7s8/?t=473.5