제출 #1306424

#제출 시각아이디문제언어결과실행 시간메모리
1306424Double_SlashCouncil (JOI23_council)C++20
0 / 100
464 ms8628 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 &ai: a) { for (int i = m; i--;) { int x; cin >> x; ai |= x << i; freq[i] += x; } dp[~ai & ((1 << m) - 1)][0] = ~ai & ((1 << m) - 1); } auto upd = [&] (int i, int v) { if (__builtin_popcount(i & v) <= __builtin_popcount(i & dp[i][1]) or v == dp[i][0]) return; dp[i][1] = v; if (__builtin_popcount(i & dp[i][1]) > __builtin_popcount(i & 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 &ai: a) { int mi = 0; for (int i = m; i--;) mi |= (freq[i] - ((ai >> i) & 1) == n / 2) << i; mi = ~dp[mi][dp[mi][0] == (~ai & ((1 << m) - 1))]; int ans = 0; for (int i = m; i--;) ans += freq[i] - ((ai >> i) & 1) - ((mi >> i) & 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...