#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5, M = 20, INF = 1e9 + 7;
int n, m, a[N], voted[M];
int dp[2][N];
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
int mask = 1 << m, cutoff = n / 2;
vector<int> dp(mask, INF);
int z = 0, o = 0, t = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
int x; cin >> x;
a[i] |= (x << j);
voted[j] += x;
}
}
int cnt = 0;
for(int j = 0; j < m; j++){
if(voted[j] > cutoff + 1) t |= (1 << j);
else if(voted[j] == cutoff + 1) o |= (1 << j);
else if(voted[j] == cutoff) z |= (1 << j);
if(voted[j] >= cutoff) cnt++;
}
for(int i = 0; i < n; i++){
a[i] = (a[i] & ((mask - 1) ^ t));
dp[a[i]] = 0;
}
for(int i = 0; i < m; i++){
for(int j = 0; j < mask; j++){
if(j & (1 << i)){
dp[j] = min(dp[j], dp[j ^ (1 << i)]);
}
}
}
for(int i = 0; i < m; i++){
for(int j = 0; j < mask; j++){
if(j & (1 << i)){
dp[j ^ (1 << i)] = min(dp[j ^ (1 << i)], dp[j] + 1);
}
}
}
for(int i = 0; i < n; i++){
int qq = (mask - 1) ^ ((z ^ (a[i] & z)) | (o & a[i]));
cout << cnt - dp[qq] - __builtin_popcount(z & a[i]) << '\n';
}
}
# | 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... |