제출 #1333379

#제출 시각아이디문제언어결과실행 시간메모리
1333379ofozCouncil (JOI23_council)C++20
0 / 100
4093 ms205636 KiB
#include <bits/stdc++.h>
#pragma GCC optimize ("O2")
using namespace std;
#define int long long
#define double long double
#define vc vector<char>
#define vi vector<int>
#define vii vector<vi>
#define viii vector<vii>
#define viiii vector<viii>
#define viiiii vector<viiii>
#define vb vector<bool>
#define vbb vector<vb>
#define pi pair<int, int>
#define ppi pair<pair<int, int>, int>
#define pip pair<int, pair<int, int>>
#define endl '\n'
#define PI acos(-1)
#define all(vec) vec.begin(), vec.end()
#define Point pair<pair<int, int>, pair<int, int>>
#define X first.first
#define Y first.second
#define C second.first
#define T second.second
// mt19937 rng(chrono::system_clock::now().time_since_epoch().count());
// uniform_int_distribution<int> dist(l, r);
const int mod = 998244353;
const int maxn = 22;
const int p1 = 911382323;
const int p2 = 496719319;
const int maxval = 128;
const double eps = 1e-9;
const int S = 550;
const int inf = 1e18;

int cntb(int x) { return __builtin_popcount(x); }

void solve() {
    int n, m;
    cin >> n >> m;
    vi a(n, 0), cnt(m, 0);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            int x;
            cin >> x;
            a[i] |= (1<<j) * x;
            cnt[j] += x;
        }
    }
    for (int d = 0; d < n; d++) {
        int prv = a[d];
        a[d] = (1<<m)-1;
        int tot = (1<<m);

        vii f(tot, vi(m+1, m));
        for (int x : a) f[x][m] = 0;
        for (int i = m-1; i >= 0; i--) {
            for (int mask = 0; mask < tot; mask++) {
                if (mask & (1<<i)) f[mask][i] = min(f[mask ^ (1<<i)][i+1], f[mask][i+1] + 1);
                else f[mask][i] = min(f[mask][i+1], f[mask ^ (1<<i)][i+1]);
            }
        }
        int t = n/2;
        int x = a[d];
        int mask = 0, res = 0;
        for (int j = 0; j < m; j++) {
            int c = cnt[j];
            if (prv & (1<<j)) c--;
            if (c >= t) res++;
            if (c == t) mask |= (1<<j);
        }
        // cerr << res << ' ' << mask << ' ' << f[mask][0] << endl;
        a[d] = prv;
        cout << res - f[mask][0] << endl;
    }
    
}


/*

*/
 
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    bool test = 0;
    int t;
    if (test) cin >> t;
    else t = 1;
    while (t--) solve();
    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...