Submission #1300685

#TimeUsernameProblemLanguageResultExecution timeMemory
1300685trandangquangCouncil (JOI23_council)C++20
100 / 100
2949 ms33484 KiB
#include<bits/stdc++.h>
using namespace std;

const int N=300000;
const int M=20;

int n,m,a[N][M],tot[M],cnt[1<<10];
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];
        }
    }

    for(int i=0; i<(1<<10); ++i){
        cnt[i]=__builtin_popcount(i);
    }

    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]+cnt[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], cnt[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]+cnt[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], cnt[h1&j]);
        }
    }

    for(int i=0; i<n; ++i) cout<<__builtin_popcount(msk[i])-ans[i]+cur[i]<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...