Submission #1306426

#TimeUsernameProblemLanguageResultExecution timeMemory
1306426Double_SlashCouncil (JOI23_council)C++20
0 / 100
491 ms8692 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n >> m; int a[n]{}, freq[m]{}; vector<array<int, 2>> dp(1 << m); for (int i = n; i--;) { for (int j = m; j--;) { int x; cin >> x; a[i] |= x << j; freq[j] += x; } dp[~a[i] & ((1 << m) - 1)][0] = i; } auto upd = [&] (int i, int j) { if (__builtin_popcount(i & ~a[j]) <= __builtin_popcount(i & ~a[dp[i][1]]) or j == dp[i][0]) return; dp[i][1] = j; if (__builtin_popcount(i & ~a[dp[i][1]]) > __builtin_popcount(i & ~a[dp[i][0]])) swap(dp[i][0], dp[i][1]); }; for (int mi = 1 << m; mi--;) { for (int i = m; i--;) { for (int j = 2; j--;) upd(mi, dp[mi | (1 << i)][j]); } } for (int mi = 0; mi < (1 << m); ++mi) { for (int i = m; i--;) { for (int j = 2; j--;) upd(mi, dp[mi & ~(1 << i)][j]); } } for (int i = n; i--;) { int mi = 0; for (int j = m; j--;) mi |= (freq[j] - ((a[i] >> j) & 1) == n / 2) << j; mi = a[dp[mi][dp[mi][0] == i]]; int ans = 0; for (int j = m; j--;) ans += freq[j] - ((a[i] >> j) & 1) - ((mi >> j) & 1) >= n / 2; 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...