Submission #1146488

#TimeUsernameProblemLanguageResultExecution timeMemory
1146488KhoaDuyCouncil (JOI23_council)C++20
100 / 100
427 ms41228 KiB
#include<bits/stdc++.h> using namespace std; #define endl '\n' void update(pair<pair<int,int>,pair<int,int>> &x,pair<int,int> y){ if(y.first>x.first.first){ if(y.second!=x.first.second){ x.second=x.first; } x.first=y; } else if(y.first>x.second.first){ if(y.second!=x.first.second){ x.second=y; } } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n,m; cin >> n >> m; int a[n][m]; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin >> a[i][j]; } } vector<pair<pair<int,int>,pair<int,int>>> DP(1<<m); for(int mask=0;mask<(1<<m);mask++){ DP[mask]={{-1,-1},{-1,-1}}; } for(int i=0;i<n;i++){ int mask=0; for(int j=0;j<m;j++){ if(a[i][j]){ mask^=(1<<j); } } update(DP[mask],{0,i}); } for(int i=0;i<m;i++){ for(int mask=0;mask<(1<<m);mask++){ if(mask&(1<<i)){ update(DP[mask],DP[mask^(1<<i)].first); update(DP[mask],DP[mask^(1<<i)].second); } } } for(int mask=0;mask<(1<<m);mask++){ int rev=mask^((1<<m)-1); if(mask<rev){ swap(DP[mask],DP[rev]); } } for(int mask=0;mask<(1<<m);mask++){ int counter=__builtin_popcount(mask); if(DP[mask].first.first==0){ DP[mask].first.first=counter; } if(DP[mask].second.first==0){ DP[mask].second.first=counter; } } for(int mask=1;mask<(1<<m);mask++){ for(int i=0;i<m;i++){ if(mask&(1<<i)){ update(DP[mask],DP[mask^(1<<i)].first); update(DP[mask],DP[mask^(1<<i)].second); } } } for(int mask=0;mask<(1<<m);mask++){ } int dif[m]; for(int j=0;j<m;j++){ dif[j]=-1; } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(a[i][j]==0){ a[i][j]=-1; } dif[j]+=a[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ dif[j]-=a[i][j]; } int ans=0; int mask=0; for(int j=0;j<m;j++){ if(dif[j]>=1){ ans++; } else if(dif[j]>=-1){ mask^=(1<<j); } } if(DP[mask].first.second==i){ ans+=DP[mask].second.first; } else{ ans+=DP[mask].first.first; } cout << ans << endl; for(int j=0;j<m;j++){ dif[j]+=a[i][j]; } } }
#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...