Submission #1246661

#TimeUsernameProblemLanguageResultExecution timeMemory
1246661CyberCowSphinx's Riddle (IOI24_sphinx)C++20
10 / 100
106 ms1160 KiB
#include "sphinx.h" #include <bits/stdc++.h> using namespace std; vector<int> v[300]; int p[300], sz[300]; int qan = 0; void make_set(int i) { p[i] = i; sz[i] = 1; qan++; } int get_papa(int i) { if(p[i] == i)return i; return p[i] = get_papa(p[i]); } void union_set(int a, int b) { a = get_papa(a); b = get_papa(b); if(a == b)return; if(sz[a] > sz[b])swap(a, b); p[a] = b; sz[b] += sz[a]; qan--; } int NN; vector<int> XX, YY; int perform_experimentQ(vector<int> &a) { int x = perform_experiment(a); qan = 0; for (int i = 0; i < a.size(); i++) { if(a[i] == NN) { make_set(i); } } for (int i = 0; i < XX.size(); i++) { if(a[XX[i]] == NN && a[YY[i]] == NN) { union_set(XX[i], YY[i]); } } return x - qan; } vector<int> find_colours(int N, vector<int> X, vector<int> Y) { XX = X; YY = Y; NN = N; if(N <= 50) { vector<int> G(N, 0); vector<int> E(N, N); for (int i = 0; i < X.size(); i++) { v[X[i]].push_back(Y[i]); v[Y[i]].push_back(X[i]); } for (int i = 0; i < N; i++) { E[i] = 0; E[v[i][0]] = 0; int x = perform_experiment(E); for (int j = 0; j < N; j++) { E[i] = -1; E[v[i][0]] = j; int y = perform_experiment(E); if(x == y) { G[i] = j; break;; } } E[i] = N; E[v[i][0]] = N; } return G; } vector<int> harc(N, N); vector<int> bi; for (int i = 0; i < N; i++) { harc[i] = -1; if(i == 0) bi.push_back(1); else bi.push_back(perform_experimentQ(harc)); } int ne = 1; vector<int> ans; for (int i = 0; i < N; i++) { if(i == 0) ans.push_back(0); else { int st = 0; if(harc[i] != harc[i - 1]) { ans.push_back(ne); ne++; continue; } int l = 0, r = i - 2, anss = i - 1; while(l <= r) { int m = (l + r) / 2; vector<int> blblb(N, N); for (int j = 0; j <= m; j++) { blblb[j] = -1; } blblb[i] = -1; int x = perform_experimentQ(blblb); if(x == harc[m]) { anss= m; r = m - 1; } else l = m + 1; } ans.push_back(ans[anss]); } } return ans; }
#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...