#include<bits/stdc++.h>
using namespace std;
const int N=300000;
const int M=20;
int n,m,a[N][M],tot[M];
int cur[N],ans[N],msk[N],msk2[N],val[1<<10][1<<10];
int main(){
cin.tie(0)->sync_with_stdio(0);
cin>>n>>m;
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
cin>>a[i][j];
tot[j]+=a[i][j];
}
}
memset(ans,0x3f,sizeof(ans));
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
if(tot[j]-a[i][j]>n/2) cur[i]++;
else if(tot[j]-a[i][j]==n/2){
msk[i]|=1<<j;
}
if(a[i][j]) msk2[i]|=1<<j;
}
}
int b1=m/2, b2=m-b1, h1=0, h2=0;
memset(val,0x3f,sizeof(val));
for(int i=0; i<n; ++i){
h1=msk[i]>>b2, h2=msk[i]&((1<<b2)-1);
for(int j=0; j<(1<<b2); ++j){
ans[i]=min(ans[i], val[h1][j]+__builtin_popcount(h2&j));
}
h1=msk2[i]>>b2, h2=msk2[i]&((1<<b2)-1);
for(int j=0; j<(1<<b1); ++j){
val[j][h2]=min(val[j][h2], __builtin_popcount(h1&j));
}
}
memset(val,0x3f,sizeof(val));
for(int i=n-1; i>=0; --i){
h1=msk[i]>>b2, h2=msk[i]&((1<<b2)-1);
for(int j=0; j<(1<<b2); ++j){
ans[i]=min(ans[i], val[h1][j]+__builtin_popcount(h2&j));
}
h1=msk2[i]>>b2, h2=msk2[i]&((1<<b2)-1);
for(int j=0; j<(1<<b1); ++j){
val[j][h2]=min(val[j][h2], __builtin_popcount(h1&j));
}
}
for(int i=0; i<n; ++i) cout<<__builtin_popcount(msk[i])-ans[i]+cur[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... |