제출 #872359

#제출 시각아이디문제언어결과실행 시간메모리
872359MinaRagy06Council (JOI23_council)C++17
62 / 100
778 ms1048576 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long int a[300'005], cnt[20], dp[21][1 << 20][21]; int main() { ios_base::sync_with_stdio(0), cin.tie(0); int n, m; cin >> n >> m; int mx = 1 << m; for (int i = 0; i < n; i++) { for (int j = 0, x; j < m; j++) { cin >> x; a[i] |= x << j; cnt[j] += x; } dp[m][a[i]][0]++; } for (int i = m - 1; i >= 0; i--) { for (int msk = 0; msk < mx; msk++) { for (int j = 0; j <= m; j++) { if ((msk >> i) & 1) { if (j - 1 >= 0) dp[i][msk][j] += dp[i + 1][msk][j - 1]; dp[i][msk][j] += dp[i + 1][msk ^ (1 << i)][j]; } else { dp[i][msk][j] += dp[i + 1][msk][j]; dp[i][msk][j] += dp[i + 1][msk ^ (1 << i)][j]; } } } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) cnt[j] -= (a[i] >> j) & 1; int msk = 0, gud = 0; for (int j = 0; j < m; j++) { if (cnt[j] == n / 2) { msk |= 1 << j; } else if (cnt[j] > n / 2) { gud++; } } int cur = __builtin_popcount(a[i] & msk), mn = m; for (int k = 0; k <= m; k++) { if (dp[0][msk][k] > 1 || (dp[0][msk][k] == 1 && cur != k)) { mn = k; break; } } cout << gud + __builtin_popcount(msk) - mn << '\n'; for (int j = 0; j < m; j++) cnt[j] += (a[i] >> j) & 1; } 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...