제출 #1244501

#제출 시각아이디문제언어결과실행 시간메모리
1244501madamadam3Carnival (CEOI14_carnival)C++20
0 / 100
1 ms416 KiB
#include <bits/stdc++.h>

using namespace std;

using vi = vector<int>;
const bool LOCAL = false;
const int N = 5; vector<int> COLOURS = {1, 2, 1, 3, 2}; int queries = 0;

int ask(int k, vi people) {
    queries++;
    
    if (LOCAL) {
        set<int> tl;
        for (auto &p : people) tl.insert(COLOURS[p]);
        return tl.size();
    } else {
        cout << k; for (auto &el : people) cout << " " << el;
        cout << endl;

        int ans; cin >> ans;
        return ans;
    }
}

void answer(vi colour) {
    if (LOCAL) {
        bool fine = true;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (COLOURS[i] == COLOURS[j] && colour[i] != colour[j]) fine = false;
                if (COLOURS[i] != COLOURS[j] && colour[i] == colour[j]) fine = false;
            }
        }
        
        cout << (fine ? "Program gave correct answer.\n" : "Program gave incorrect answer.\n");
        cout << "Took " << queries << " queries.\n";
        cout << "Program output:"; for (auto &el : colour) cout << " " << el; cout << "\n";
    } else {
        cout << "0"; for (auto &el : colour) cout << " " << el;
        cout << endl;
    }
}

struct DSU {
    int n; vi par, siz;
    DSU() {};
    DSU(int N) {
        n = N; par.resize(n); siz.assign(n, 1);
        iota(par.begin(), par.end(), 0);
    } 
    int find(int v) {
        if (v == par[v]) return v;
        return par[v] = find(par[v]);
    }
    void unite(int a, int b) {
        a = find(a); b = find(b);
        if (a != b) {
            if (siz[b] > siz[a]) swap(a, b);
            par[b] = a;
            siz[a] += siz[b];
        }
    }
};

int main() {
    int n = LOCAL ? N : -1; if (!LOCAL) cin >> n;
    auto dsu = DSU(n);

    for (int i = 0; i < n; i++) {
        for (int j = i+1; j < n; j++) {
            if (i == j) continue;

            int ans = ask(2, vi({i, j}));
            if (ans == 1) dsu.unite(i, j);
        }
    }

    vi ans(n); for (int i = 0; i < n; i++) ans[i] = dsu.find(i);
    answer(ans);
    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...