제출 #877776

#제출 시각아이디문제언어결과실행 시간메모리
877776LucaIlieCouncil (JOI23_council)C++17
41 / 100
4049 ms11636 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAX_N = 3e5;
const int MAX_M = 20;

struct aa {
    int x, y;

    void operator += ( const aa &a ) {
        if ( x == -1 ) {
            x = a.x;
            y = a.y;
        } else if ( y == -1 )
            y = a.x;
    }
};

aa countVc[1 << MAX_M];
int vote[MAX_N], pro[MAX_M];

int main() {
    int n, m;

    cin >> n >> m;
    for ( int mask = 0; mask < (1 << m); mask++ )
        countVc[mask] = { -1, -1 };
    for ( int i = 0; i < n; i++ ) {
        for ( int b = 0; b < m; b++ ) {
            int x;
            cin >> x;
            vote[i] += (x << b);
            pro[b] += x;
        }
        countVc[vote[i]] += { i, -1 };
    }

    for ( int b = 0; b < m; b++ ) {
        for ( int mask = 0; mask < (1 << m); mask++ ) {
            if ( (mask >> b) & 1 )
                countVc[mask] += countVc[mask - (1 << b)];
        }
    }

    for ( int i = 0; i < n; i++ ) {
        vector<int> bits;
        int ap = 0;
        for ( int b = 0; b < m; b++ ) {
            int x = pro[b] - ((vote[i] >> b) & 1);
            if ( x > n / 2 )
                ap++;
            if ( x == n / 2 )
                bits.push_back( b );
        }

        int maxAp = ap;
        for ( int mask = 0; mask < (1 << bits.size()); mask++ ) {
            int vc = (1 << m) - 1;
            for ( int b = 0; b < bits.size(); b++ ) {
                if ( (mask >> b) & 1 )
                    vc -= (1 << bits[b]);
            }
            if ( countVc[vc].x != -1 && (countVc[vc].x != i || (countVc[vc].y != -1 && countVc[vc].y != i)) )
                maxAp = max( maxAp, ap + __builtin_popcount( mask ) );
        }

        cout << maxAp << "\n";
    }

    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

council.cpp: In function 'int main()':
council.cpp:60:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |             for ( int b = 0; b < bits.size(); b++ ) {
      |                              ~~^~~~~~~~~~~~~
#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...