# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
95018 | Mohammad_Yasser | Mechanical Doll (IOI18_doll) | C++14 | 1 ms | 224 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
struct Graph {
int S = 1;
int N;
vector<int> X, Y, turn;
void build(int node, int level, int first_turn) {
if (node > S) {
turn[node] = first_turn;
return;
}
X[node] = 2 * node;
Y[node] = 2 * node + 1;
build(X[node], level + 1, first_turn);
build(Y[node], level + 1, first_turn + (1 << level));
X[node] *= -1;
Y[node] *= -1;
}
void build(int n) {
N = n;
while ((S + 1) < N) {
S = 2 * S + 1;
}
X.resize(S + 1);
Y.resize(S + 1);
turn = vector<int>(2 * S + 1, -1);
build(1, 0, 0);
}
} graph;
void create_circuit(int M, std::vector<int> A) {
graph.build(A.size() + 1);
vector<int> C(M + 1);
for (int& x : C) {
x = -1;
}
for (int i = graph.S / 2; i <= graph.S; ++i) {
if (graph.turn[-graph.X[i]] < A.size()) {
graph.X[i] = A[graph.turn[-graph.X[i]]];
} else {
graph.X[i] = -1;
}
if (graph.turn[-graph.Y[i]] < A.size()) {
graph.Y[i] = A[graph.turn[-graph.Y[i]]];
} else {
graph.Y[i] = -1;
}
}
graph.Y[graph.S] = 0;
graph.X.erase(graph.X.begin());
graph.Y.erase(graph.Y.begin());
answer(C, graph.X, graph.Y);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |