Submission #1306424

#TimeUsernameProblemLanguageResultExecution timeMemory
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...