제출 #1244501

#제출 시각아이디문제언어결과실행 시간메모리
1244501madamadam3사육제 (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...