Submission #1147404

#TimeUsernameProblemLanguageResultExecution timeMemory
1147404AlishCouncil (JOI23_council)C++20
100 / 100
3493 ms166676 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef long double ld; #define F first #define S second #define pb push_back #define endl '\n' #define Mp make_pair #define all(x) x.begin(), x.end() #define debug(x) cerr << #x << " = " << x << endl; #define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define file_io freopen("atlarge.in" , "r" , stdin) ;freopen("atlarge.out" , "w" , stdout) ; const int N = 3e5+23, M=21; vector<pii> dp[1<<M], dp2[1<<M]; int a[N]; int cnt[M]; int n, m; vector<pii> Merge(vector<pii> a, vector<pii> b){ vector<pii> c; for (auto pp: a) c.pb(pp); for (auto pp: b) c.pb(pp); sort(all(c)); reverse(all(c)); vector<pii> res; for (auto pp: c) { if(res.size()==2) break; if(res.empty() || (res.back().S!=pp.S)) res.pb(pp); } return res; } int main() { fast_io cin>>n>>m; for (int i=0; i<n; i++){ for (int j=0; j<m; j++){ int x; cin>>x; a[i]+=(1<<j)*x; cnt[j]+=x; } dp[(1<<m)-1-a[i]]=Merge(dp[(1<<m)-1-a[i]], {Mp(-1, i)}); } for (int i=0; i<m; i++)for (int mask=0; mask<(1<<m); mask++) if(!(mask>>i&1)) dp[mask]=Merge(dp[mask], dp[mask^(1<<i)]); for (int mask=0; mask<(1<<m); mask++){ int k=__builtin_popcount(mask); if(dp[mask].size()>=1) dp2[mask].pb({k, dp[mask][0].S}); if(dp[mask].size()>=2) dp2[mask].pb({k, dp[mask][1].S}); } for (int i=0; i<m; i++) for (int mask=0; mask<(1<<m); mask++) if(mask>>i&1) dp2[mask]=Merge(dp2[mask], dp2[mask^(1<<i)]); int A=0, B=0, C=0; for (int i=0; i<m; i++){ if(cnt[i]==n/2)A+=(1<<i); if(cnt[i]==n/2+1) B+=(1<<i); if(cnt[i]>=n/2+2) C+=(1<<i); } for (int i=0; i<n; i++){ int ok=C|(B&((1<<m)-1-a[i])); int can=(B&a[i])|(A&((1<<m)-1-a[i])); int ans=__builtin_popcount(ok); if(dp2[can][0].S==i) ans+=dp2[can][1].F; else ans+=dp2[can][0].F; cout<<ans<<endl; } }
#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...