Submission #1213243

#TimeUsernameProblemLanguageResultExecution timeMemory
1213243KK_1729Council (JOI23_council)C++20
6 / 100
350 ms88468 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define pb push_back #define all(a) a.begin(), a.end() #define endl "\n" void printVector(vector<int> a){ for (auto x: a) cout << x << " "; cout << endl; } void solve(){ int n, m; cin >> n >> m; vector<vector<int>> o(n); vector<int> a(n); vector<int> count(m); vector<set<int>> f(1 << m); FOR(i,0,n){ FOR(j,0,m){ int x; cin >> x; o[i].pb(x); a[i] += ((1-x) << j); if (x) count[j]++; } f[a[i]].insert(i); } for (int i = (1ll << m) - 1; i >= 0; i--){ if (f[i].size() >= 2) continue; for (int j = 0; j < m; j++){ if ((i & (1 << j)) == 0){ for (auto x: f[i|(1 << j)]){ f[i].insert(x); } if (f[i].size() >= 2) break; } } } vector<vector<pair<int, int>>> dp(m+1, vector<pair<int, int>>(1 << m)); for (int i = 0; i < (1 << m); i++){ for (int k = 0; k <= m; k++){ vector<int> candid = {-1, -1}; if (f[i].size() > 0 && __builtin_popcount(i) == k){ auto it = f[i].begin(); candid.pb(*it); if (f[i].size() > 1 && __builtin_popcount(i) == k){ it++; candid.pb(*it); } } for (int j = 0; j < m; j++){ if (i & (1 << j)){ candid.pb(dp[k][i^(1 << j)].first); candid.pb(dp[k][i^(1 << j)].second); } } sort(all(candid)); reverse(all(candid)); dp[k][i] = make_pair(candid[0], candid[1]); } } // printVector(count); FOR(i,0,n){ vector<int> c(m); FOR(j,0,m) c[j] = count[j]; FOR(j,0,m){ if (o[i][j] == 1) c[j]--; } int e = 0; int p = 0; FOR(j,0,m){ if (c[j] == n/2) e |= (1 << j); if (c[j] > n/2) p++; } // cout << e << endl; int ans = 0; int v = 0; FOR(j,1,m+1){ if ((dp[j][e].first != -1 && dp[j][e].first != i) || (dp[j][e].second != -1 && dp[j][e].second != i)) v = j; } // cout << e << endl; cout << p+v << endl; } } int32_t main(){ ios::sync_with_stdio(false);cin.tie(nullptr); int t = 1; // cin >> t; while (t--) solve(); }
#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...