Submission #1300684

#TimeUsernameProblemLanguageResultExecution timeMemory
1300684trandangquangCouncil (JOI23_council)C++20
78 / 100
4094 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]; 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 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...