#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int a[n]{}, freq[m]{};
vector<array<int, 2>> dp(1 << m);
for (int &ai: a) {
for (int i = m; i--;) {
int x;
cin >> x;
ai |= x << i;
freq[i] += x;
}
dp[~ai & ((1 << m) - 1)][0] = ~ai & ((1 << m) - 1);
}
auto upd = [&] (int i, int v) {
if (__builtin_popcount(i & v) <= __builtin_popcount(i & dp[i][1]) or v == dp[i][0]) return;
dp[i][1] = v;
if (__builtin_popcount(i & dp[i][1]) > __builtin_popcount(i & dp[i][0])) swap(dp[i][0], dp[i][1]);
};
for (int mi = 1 << m; mi--;) {
for (int i = m; i--;) {
for (int j = 2; j--;) upd(mi, dp[mi | (1 << i)][j]);
}
}
for (int mi = 0; mi < (1 << m); ++mi) {
for (int i = m; i--;) {
for (int j = 2; j--;) upd(mi, dp[mi & ~(1 << i)][j]);
}
}
for (int &ai: a) {
int mi = 0;
for (int i = m; i--;) mi |= (freq[i] - ((ai >> i) & 1) == n / 2) << i;
mi = ~dp[mi][dp[mi][0] == (~ai & ((1 << m) - 1))];
int ans = 0;
for (int i = m; i--;) ans += freq[i] - ((ai >> i) & 1) - ((mi >> i) & 1) >= n / 2;
cout << ans << endl;
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |