Submission #793426

#TimeUsernameProblemLanguageResultExecution timeMemory
793426JohannCouncil (JOI23_council)C++14
100 / 100
959 ms58768 KiB
#include "bits/stdc++.h" using namespace std; typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> pii; typedef vector<pii> vpii; typedef vector<vpii> vvpii; pii operator+(const pii &a, const pii &b) { return {a.first + b.first, a.second + b.second}; } #define sz(x) (int)(x).size() #define all(x) (x).begin(), (x).end() int N, M; vvi A; vi votes; int vr; // votes required vi trans, transR; int dp[1 << 20][2]; void addRes(int i, int idx) { if (idx == dp[i][0] || idx == dp[i][1]) return; for (int j = 0; j < 2 && idx != -1; ++j) { if (dp[i][j] == -1 || __builtin_popcount(trans[idx] & i) < __builtin_popcount(trans[dp[i][j]] & i)) swap(dp[i][j], idx); } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N >> M; vr = N / 2; A.assign(N, vi(M)); votes.assign(M, 0); trans.assign(N, 0); transR.assign(N, 0); for (int i = 0; i < N; ++i) { for (int j = 0; j < M; ++j) { cin >> A[i][j]; votes[j] += A[i][j]; trans[i] |= (A[i][j]) ? (1 << j) : 0; } } for (int i = 0; i < 1 << M; ++i) dp[i][0] = dp[i][1] = -1; for (int i = 0; i < N; ++i) addRes(((1 << M) - 1) & ~trans[i], i); for (int i = (1 << M) - 1; i >= 0; --i) { for (int k = 0; k < M; ++k) { if (i & (1 << k)) for (int j = 0; j < 2; ++j) addRes(i ^ (1 << k), dp[i][j]); } } for (int i = 0; i < (1 << M); ++i) { for (int k = 0; k < M; ++k) { if (!(i & (1 << k))) for (int j = 0; j < 2; ++j) addRes(i ^ (1 << k), dp[i][j]); } } for (int i = 0; i < N; ++i) { int ans = 0; int pattern = 0; for (int k = 0; k < M; ++k) { if (votes[k] - A[i][k] >= vr) ++ans; if (votes[k] - A[i][k] == vr) pattern |= 1 << k; } int j = dp[pattern][0]; if (j == i) j = dp[pattern][1]; cout << ans - __builtin_popcount(pattern & trans[j]) << "\n"; } return 0; }
#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...