算法
(贪心)
尽可能凑出每个数的二进制表示下高位的 1
C++ 代码
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using std::cin;
using std::cout;
using std::vector;
void solve() {
int n, k;
cin >> n >> k;
vector<int> a(n);
rep(i, n) cin >> a[i];
int ans = 0;
for (int j = 30; j >= 0; --j) {
int x = 0;
rep(i, n){
if (a[i]>>j&1) x++;
}
if (k and n-x <= k) {
ans |= 1<<j;
k -= n-x;
}
if (x == n) {
ans |= 1<<j;
}
}
cout << ans << '\n';
}
int main() {
int t;
cin >> t;
while (t--) solve();
return 0;
}