Submission #415451

#TimeUsernameProblemLanguageResultExecution timeMemory
415451_fractalMechanical Doll (IOI18_doll)C++14
47 / 100
248 ms12060 KiB
#include "doll.h" #include <iostream> using namespace std; vector<int> X, Y; vector<int> XX, YY; vector<int> was; int S; void rec(int pos, int val) { if (was[pos] == 0) { if (XX[pos] == 0) { X[pos] = val; XX[pos] = 1; was[pos] ^= 1; return; } else { was[pos] ^= 1; rec(-X[pos] - 1, val); } } else { if (YY[pos] == 0) { YY[pos] = 1; Y[pos] = val; was[pos] ^= 1; return; } else { was[pos] ^= 1; rec(-Y[pos] - 1, val); } } } void build(int v, int cur, int len) { if (cur < len) { XX[v] = 1; YY[v] = 1; S++; X[v] = -S; was.push_back(0); X.push_back(0), Y.push_back(0); XX.push_back(0), YY.push_back(0); S++; Y[v] = -S; was.push_back(0); X.push_back(0), Y.push_back(0); XX.push_back(0), YY.push_back(0); build(-X[v] - 1, cur + 1, len); build(-Y[v] - 1, cur + 1, len); } else { return; } } void create_circuit(int M, vector<int> A) { int N = A.size(); vector<int> C(M + 1); X.clear(), Y.clear(); A.push_back(0); C[0] = A[0]; int n = 1, len = 0; while (n < N) n <<= 1, len++; N++; S++; was.push_back(0); X.push_back(0), Y.push_back(0); XX.push_back(0), YY.push_back(0); for (int i = 1; i <= M; ++i) C[i] = -S; build(0, 1, len); for (int i = 1; i < N - 1; ++i) rec(0, A[i]); for (int i = N - 2; i < n - 1; ++i) rec(0, -1); rec(0, A[N - 1]); answer(C, X, Y); }
#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...