Submission #1162927

#TimeUsernameProblemLanguageResultExecution timeMemory
1162927pemguimnCouncil (JOI23_council)C++20
6 / 100
32 ms2120 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 3e5 + 5, M = 20, INF = 1e9 + 7;
int n, m, a[N], voted[M];

int dp[2][N];
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    cin >> n >> m;
    int mask = 1 << m, cutoff = n / 2; 

    vector<int> dp(mask, INF);       
    int z = 0, o = 0, t = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            int x; cin >> x;
            a[i] |= (x << j);
            voted[j] += x;
        }
    }   

    int cnt = 0;
    for(int j = 0; j < m; j++){
        if(voted[j] > cutoff + 1) t |= (1 << j);
        else if(voted[j] == cutoff + 1) o |= (1 << j);
        else if(voted[j] == cutoff) z |= (1 << j);

        if(voted[j] >= cutoff) cnt++;
    }

    for(int i = 0; i < n; i++){
        a[i] = (a[i] & ((mask - 1) ^ t));
        dp[a[i]] = 0;
    }

    for(int i = 0; i < m; i++){
        for(int j = 0; j < mask; j++){
            if(j & (1 << i)){
                dp[j] = min(dp[j], dp[j ^ (1 << i)]);
            }
        }
    }
    for(int i = 0; i < m; i++){
        for(int j = 0; j < mask; j++){
            if(j & (1 << i)){
                dp[j ^ (1 << i)] = min(dp[j ^ (1 << i)], dp[j] + 1);
            }
        }
    }

    for(int i = 0; i < n; i++){
        int qq = (mask - 1) ^ ((z ^ (a[i] & z)) | (o & a[i]));
        cout << cnt - dp[qq] - __builtin_popcount(z & a[i]) << '\n';
    }
}
#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...