Submission #570317

#TimeUsernameProblemLanguageResultExecution timeMemory
570317600MihneaICC (CEOI16_icc)C++17
61 / 100
182 ms588 KiB
#include <bits/stdc++.h> #include "icc.h" using namespace std; mt19937 rng((long long) (new char)); int get(vector<int> a, vector<int> b) { if (a.empty() || b.empty()) { return 0; } return query((int) a.size(), (int) b.size(), a.data(), b.data()); } vector<int> operator + (vector<int> a, vector<int> b) { for (auto &x : b) { a.push_back(x); } return a; } const int N = 100 + 7; int t[N]; int get_root(int a) { if (t[a] == a) { return a; } else { return t[a] = get_root(t[a]); } } void join(int a, int b) { t[get_root(a)] = get_root(b); } void run(int n) { for (int i = 1; i <= n; i++) { t[i] = i; } for (int step = 1; step <= n - 1; step++) { vector<vector<int>> comps; for (int i = 1; i <= n; i++) { if (get_root(i) == i) { vector<int> currentComp; for (int j = 1; j <= n; j++) { if (get_root(j) == i) { currentComp.push_back(j); } } comps.push_back(currentComp); } } assert((int) comps.size() == n - step + 1); assert((int) comps.size() >= 2); vector<int> p1, p2; while (1) { p1.clear(); p2.clear(); shuffle(comps.begin(), comps.end(), rng); for (auto &comp : comps) { if ((int) p1.size() < (int) p2.size()) { p1 = p1 + comp; } else { p2 = p2 + comp; } } assert((int) p1.size() + (int) p2.size() == n); if (get(p1, p2) == 1) { break; } } while ((int) p1.size() > 1 || (int) p2.size() > 1) { shuffle(p1.begin(), p1.end(), rng); shuffle(p2.begin(), p2.end(), rng); if ((int) p2.size() < (int) p1.size()) { swap(p1, p2); } assert((int) p1.size() <= (int) p2.size()); vector<int> X(p2.begin(), p2.begin() + (int)p2.size() / 2), Y(p2.begin() + (int) p2.size() / 2, p2.end()); assert((int) X.size() + (int) Y.size() == (int) p2.size()); if (get(p1, X)) { p2 = X; } else { p2 = Y; } } assert((int) p1.size() == 1 && (int) p2.size() == 1); join(p1[0], p2[0]); setRoad(p1[0], p2[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...
#Verdict Execution timeMemoryGrader output
Fetching results...