이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
    #include "bits/stdc++.h"
    #define int long long
    using namespace std;
    int32_t main() {
      ios::sync_with_stdio(0);
      cin.tie(0);
      int n, m;
      cin >> n >> m;
      int a[n][m];
      int b[n];
      int s[m];
      for(int i=0; i<m; i++) s[i] = 0;
      for(int i=0; i<n; i++) {
        b[i] = 0;
        for(int j=0; j<m; j++) {
          cin >> a[i][j];
          s[j] += a[i][j];
          b[i] |= (a[i][j] << j);
        }
      }
      int cnt[(1<<m)];
      int ans[(1<<m)];
      for(int i=0; i<(1<<m); i++) cnt[i] = 0, ans[i] = -1;
      for(int i=0; i<n; i++) cnt[b[i]]++;
      pair<int,int> dp[(1<<m)][2];
      for(int i=0; i<(1<<m); i++) for(int j=0; j<2; j++) dp[i][j] = {1e9, -1};
      for(int i=0; i<n; i++) {
        if(dp[b[i]][0].first == 0) dp[b[i]][1] = {0, i};
        else dp[b[i]][0] = {0, i};
      }
      for(int i=0; i<m; i++) {
        for(int j=0; j<(1<<m); j++) {
          if(j & (1<<i)) {
            vector<pair<int,int> > w = {
              dp[j^(1<<i)][0], dp[j^(1<<i)][1],
              dp[j][0], dp[j][1]
            };
            sort(w.begin(),w.end());
            dp[j][0] = w[0];
            for(int k=1; k<4; k++) {
              if(dp[j][0].second != w[k].second) {
                dp[j][1] = w[k]; break;
              }
            }
          }
        }
      }
      reverse(dp, dp+(1<<m));
      for(int j=0;j<m;j++) {
        for(int i = 1;i<(1<<m);i++) {
          if(dp[i][1].first == 0) continue;
          if(i&(1<<j)) {
            int tar0=dp[i^(1<<j)][0].first+1, tar1=dp[i^(1<<j)][1].first+1;
            vector<pair<int,int> > w = {
              {tar0,dp[i^(1<<j)][0].second},
              {tar1,dp[i^(1<<j)][1].second},
              dp[i][0],dp[i][1]
            };
            sort(w.begin(), w.end());
            dp[i][0] = w[0];
            for(int k=1; k<4; k++) {
              if(dp[i][0].second != w[k].second) {
                dp[i][1] = w[k]; break;
              }
            }
          }
        }
      }
      for(int i=0; i<n; i++) {
        int bad = 0, base = 0;
        for(int j=0; j<m; j++) {
          int ss = s[j] - a[i][j];
          if(ss >= n/2) base++;
          if(ss == n/2) bad |= (1<<j);
        }
        int opt = dp[bad][0].first;
        if(dp[bad][0].second == i) opt = dp[bad][1].first;
        cout << base - opt << '\n';
      }
    }
컴파일 시 표준 에러 (stderr) 메시지
council.cpp: In function 'int32_t main()':
council.cpp:22:11: warning: variable 'ans' set but not used [-Wunused-but-set-variable]
   22 |       int ans[(1<<m)];
      |           ^~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |