Submission #1363058

#TimeUsernameProblemLanguageResultExecution timeMemory
1363058nguyenkhangninh99Council (JOI23_council)C++20
6 / 100
33 ms9224 KiB
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5;
int n, m, cnt[20], res;
bool a[maxn][20], vis[1 << 20];
vector<int> vec, trace;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    memset(vis, false, sizeof(vis));

    cin >> n >> m;
    for (int i = 0; i < n; ++i){
        int mask = 0;
        for (int j = 0; j < m; ++j){
            cin >> a[i][j];
            if (a[i][j]){
                mask += (1 << j);
                cnt[j]++;
            }
        }
        vec.push_back(mask);
    }
    sort(vec.begin(), vec.end());
    vec.erase(unique(vec.begin(), vec.end()), vec.end());

    for (int mask : vec){
        bool exist = false;
        for (int sub = mask; sub > 0; sub = (sub - 1) & mask){
            if (vis[sub]){
                exist = true;
                break;
            }
        }
        if (!exist) trace.push_back(mask);
        vis[mask] = true;
    }

    for (int i = 0; i < n; ++i){
        int mask = 0, ans = 0;
        for (int j = 0; j < m; ++j){
            int cur = cnt[j];
            if (a[i][j]) cur--;
            if (cur >= n / 2) ans++;
            if (cur == n / 2) mask += (1 << j);
        }
        int miss = __builtin_popcount(mask);
        for (int other : trace) miss = min(miss, __builtin_popcount(mask & other));
        cout << ans - miss << '\n';
    }
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...