最後一場了,還是寫寫吧;
線性只因 40pts
賽時把與看成或了,最後才發現,結果我的神奇程式碼交上去得了40pts。。。
從高位到低位依次考慮,若這一位是1的數大於m則統計並刪除其它的數;
否則直接跳過;
點選檢視程式碼
#include <iostream>
#include <cstdio>
using namespace std;
int n, m;
int a[5000005];
int ans;
bool vis[5000005];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
int c = 0, o = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 30; i >= 0; i--) {
int sum = 0;
for (int j = 1; j <= n; j++) {
if (a[j] & (1 << i) && !vis[j]) sum++;
}
if (sum >= m) {
ans += (1 << i);
for (int j = 1; j <= n; j++) {
if (!(a[j] & (1 << i))) vis[j] = true;
}
}
}
cout << ans;
return 0;
}