Submission #1048206

#TimeUsernameProblemLanguageResultExecution timeMemory
1048206Alihan_8Mechanical Doll (IOI18_doll)C++17
47 / 100
95 ms14204 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define ln '\n' #define all(x) x.begin(), x.end() template <class F, class S> bool chmax(F &u, const S &v){ bool flag = false; if ( u < v ){ u = v; flag |= true; } return flag; } void create_circuit(int m, std::vector<int> A) { int n = A.size(), x = (n + 1) / 2; int lg = __lg(x); if ( (1 << lg) < x ) ++lg; vector <int> L(2 * n), R(2 * n); int ct = 0; auto build_tree = [&](auto build_tree, int v, int d) -> void{ chmax(ct, v); L[v] = R[v] = -1; if ( d == 0 ) return; L[v] = v * 2, R[v] = v * 2 + 1; build_tree(build_tree, v * 2, d - 1); build_tree(build_tree, v * 2 + 1, d - 1); }; build_tree(build_tree, 1, lg); vector <int> C(m + 1, -1), X(ct), Y(ct); C[0] = A[0]; vector <int> state(ct + 1); auto dfs = [&](auto dfs, int v, int p) -> void{ state[v] ^= 1; if ( v == ct && !state[v] ){ // last Vertex Y[v - 1] = 0; return; } if ( L[v] == -1 ){ // leaf vertex if ( state[v] > 0 ){ X[v - 1] = (p < n ? A[p] : -1); } else Y[v - 1] = (p < n ? A[p] : -1); dfs(dfs, 1, p + 1); return; } X[v - 1] = -L[v]; Y[v - 1] = -R[v]; if ( state[v] ){ dfs(dfs, L[v], p); } else dfs(dfs, R[v], p); }; dfs(dfs, 1, 1); answer(C, X, Y); return; for ( int i = 0; i <= m; i++ ){ cout << i << " " << C[i] << ln; } for ( int i = 0; i < ct; i++ ){ cout << -(i + 1) << ' ' << X[i] << ln; cout << -(i + 1) << " " << Y[i] << ln; } }
#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...