#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 i = n; i--;) {
for (int j = m; j--;) {
int x;
cin >> x;
a[i] |= x << j;
freq[j] += x;
}
dp[~a[i] & ((1 << m) - 1)][0] = i;
}
auto upd = [&] (int i, int j) {
if (__builtin_popcount(i & ~a[j]) <= __builtin_popcount(i & ~a[dp[i][1]]) or j == dp[i][0]) return;
dp[i][1] = j;
if (__builtin_popcount(i & ~a[dp[i][1]]) > __builtin_popcount(i & ~a[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 i = n; i--;) {
int mi = 0;
for (int j = m; j--;) mi |= (freq[j] - ((a[i] >> j) & 1) == n / 2) << j;
mi = a[dp[mi][dp[mi][0] == i]];
int ans = 0;
for (int j = m; j--;) ans += freq[j] - ((a[i] >> j) & 1) - ((mi >> j) & 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... |