Submission #995505

#TimeUsernameProblemLanguageResultExecution timeMemory
995505shiomusubi496Mechanical Doll (IOI18_doll)C++17
100 / 100
97 ms8864 KiB
#include "doll.h" #include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (int)(n); ++i) #define rep2(i, a, b) for (int i = (int)(a); i < (int)(b); ++i) #define rrep(i, n) for (int i = (int)(n) - 1; i >= 0; --i) #define rrep2(i, a, b) for (int i = (int)(b) - 1; i >= (int)(a); --i) #define all(v) begin(v), end(v) using namespace std; using ll = long long; template<class T, class U> bool chmin(T& a, const U& b) { return a > b ? a = b, true : false; } template<class T, class U> bool chmax(T& a, const U& b) { return a < b ? a = b, true : false; } void create_circuit(int M, std::vector<int> A) { int N = A.size(); vector<int> C(M + 1, -1); int lev = 0; while ((1 << (lev + 1)) <= N) ++lev; vector<int> X, Y; while (lev >= 0) { int n = 1 << lev; if (n > N) { X.push_back(-1); Y.push_back(0); --lev; if (lev >= 0) Y.back() = -(int)X.size() - 1; continue; } N -= n; if (n == 1) { X.push_back(1); Y.push_back(0); --lev; } else { X.push_back(-(int)X.size() - 2); Y.push_back(0); int idx = Y.size() - 1; int tmp = X.size(); rep2 (i, 1, n / 2) { X.push_back(-(tmp + i * 2)); Y.push_back(-(tmp + i * 2 + 1)); } rep2 (i, n / 2, n) { X.push_back(1); Y.push_back(1); } --lev; Y[idx] = -(int)X.size() - 1; } } { int cur = 0; int idx = 0; vector<bool> sw(X.size(), true); do { if (cur >= 0) cur = C[cur]; else { if (sw[-1 - cur]) { sw[-1 - cur] = false; if (X[-1 - cur] > 0) X[-1 - cur] = A[idx++]; cur = X[-1 - cur]; } else { sw[-1 - cur] = true; if (Y[-1 - cur] > 0) Y[-1 - cur] = A[idx++]; cur = Y[-1 - cur]; } } } while (cur != 0); } 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...