Submission #1167043

#TimeUsernameProblemLanguageResultExecution timeMemory
1167043thangdz2k7Council (JOI23_council)C++20
56 / 100
4096 ms26024 KiB
#include <bits/stdc++.h>

using namespace std;

#define Mask(i) (1 << (i))
#define Bit(x, i) ((x) >> (i) & 1)
#define bp(x) __builtin_popcount(x)

const int LG = 20;
const int N = Mask(LG);

int n, m, a[N][LG], state[N];
int ans[N], cnt_s[N], cnt_b[LG];

void process(){
    cin >> n >> m;
    int mx = Mask(m);

    for (int i = 0; i < n; ++ i){
        for (int j = 0; j < m; ++ j){
            cin >> a[i][j];
            if (a[i][j]) state[i] |= Mask(j), cnt_b[j] ++;
        }
        cnt_s[state[i]] ++;
    }

    for (int mask1 = 0; mask1 < mx; ++ mask1) if (cnt_s[mask1]){
        cnt_s[mask1] --;
        int num = 0, fl = 0;
        for (int i = 0; i < m; ++ i){
            cnt_b[i] -= Bit(mask1, i);
            if (cnt_b[i] >= n / 2) num ++;
            if (cnt_b[i] == n / 2) fl |= Mask(i);
        }

        for (int mask2 = 0; mask2 < mx; ++ mask2) if (cnt_s[mask2])
            ans[mask1] = max(ans[mask1], num - bp(fl & mask2));

        cnt_s[mask1] ++;
        for (int i = 0; i < m; ++ i)
            cnt_b[i] += Bit(mask1, i);

    }

    for (int i = 0; i < n; ++ i)
        cout << ans[state[i]] << "\n";
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    process();
    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...