제출 #1289733

#제출 시각아이디문제언어결과실행 시간메모리
1289733hasandasNorela (info1cup18_norela)C++20
100 / 100
66 ms576 KiB
#include <bits/stdc++.h>

using namespace std;


int main() {
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);

    int n, m;
    cin >> n >> m;

    vector<unsigned long long> cardMasks(n, 0ULL);

    for (int spell = 0; spell < m; ++spell) {
        int q; cin >> q;
        for (int t = 0; t < q; ++t) {
            int a; cin >> a; --a; // 0-based kart indeksi
            if (a >= 0 && a < n) cardMasks[a] |= (1ULL << spell);
        }
    }

    auto ok_mask = [&](unsigned long long mask) -> bool {
        for (int i = 0; i < n; ++i) {
            if ((__builtin_parityll(cardMasks[i] & mask)) != 1) return false;
        }
        return true;
    };

    bool found = false;
    vector<int> answer;
    for (int k = 0; k <= m && !found; ++k) {
        if (k == 0) {
            if (ok_mask(0ULL)) {
                cout << 0 << '\n' << '\n';
                return 0;
            }
            continue;
        }
        vector<int> comb(k);
        for (int i = 0; i < k; ++i) comb[i] = i;
        while (true) {
            unsigned long long mask = 0ULL;
            for (int x : comb) mask |= (1ULL << x);
            if (ok_mask(mask)) {
                found = true;
                answer = comb;
                break;
            }
            int idx = k - 1;
            while (idx >= 0 && comb[idx] == idx + m - k) --idx;
            if (idx < 0) break; // bitti
            ++comb[idx];
            for (int j = idx + 1; j < k; ++j) comb[j] = comb[j-1] + 1;
        }
    }

    if (!found) {
        cout << -1 << '\n';
        return 0;
    }

    cout << (int)answer.size() << '\n';
    for (size_t i = 0; i < answer.size(); ++i) {
        if (i) cout << ' ';
        cout << (answer[i] + 1);
    }
    cout << endl;
    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...