题解
2025-11-27 07:24:12
发布于:湖南
1阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> a(n);
vector<int> cnt(10, 0); // 因为a_i < 1024,最多10位(0~9位)
for (int i = 0; i < n; ++i) {
cin >> a[i];
// 统计每个二进制位的1的数量
for (int b = 0; b < 10; ++b) {
if (a[i] & (1 << b)) {
cnt[b]++;
}
}
}
int max_val = 0, min_val = 0;
for (int b = 9; b >= 0; --b) { // 从高位到低位处理
// 构造最大值:该位有1则设为1
if (cnt[b] >= 1) {
max_val |= (1 << b);
}
// 构造最小值:该位的1数量不足n则设为0
if (cnt[b] < n) {
min_val |= 0; // 保持0,无需操作
} else {
min_val |= (1 << b); // 所有数该位都是1,只能设为1
}
}
cout << (max_val - min_val) << endl;
}
return 0;
}
这里空空如也







有帮助,赞一个