# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1024786 | fv3 | Mechanical Doll (IOI18_doll) | C++14 | 87 ms | 11592 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 <bits/stdc++.h>
#include "doll.h"
using namespace std;
vector<int> C;
vector<int> X, Y;
int lastSwitch = 0;
int INF = 1 << 30;
void make_connections(int cnt)
{
int origo = -X.size() - 1;
int index = 0;
int nt = 1;
while (nt < cnt)
nt *= 2;
vector<int> st(2 * nt), label(2 * nt);
for (int i = 2 * nt - cnt; i < 2 * nt; i++)
st[i] = 1;
for (int i = nt - 1; i >= 1; i--)
st[i] = max(st[i*2], st[i*2|1]);
label[1] = --lastSwitch;
for (int i = 1; i < nt; i++)
{
if (!st[i]) continue;
if (st[i * 2])
{
if (i * 2 >= nt)
{
X.push_back(INF);
}
else
{
X.push_back(--lastSwitch);
label[i*2] = lastSwitch;
}
}
else
{
X.push_back(origo);
}
if ((2 * i | 1) >= nt)
{
Y.push_back(INF);
}
else
{
label[(2*i|1)] = --lastSwitch;
Y.push_back(lastSwitch);
}
}
}
void simulate(vector<int> &A)
{
int nxt = 0;
int index = C[0];
A.push_back(0);
vector<int> state(X.size());
while (index != 0)
{
if (index < 0)
{
if (!state[-index - 1])
{
state[-index-1] ^= 1;
if (X[-index-1] == INF)
{
X[-index-1] = A[nxt];
}
index = X[-index-1];
}
else
{
state[-index-1] ^= 1;
if (Y[-index-1] == INF)
Y[-index-1] = A[nxt];
index = Y[-index-1];
}
}
else
{
index = C[index];
nxt++;
}
}
}
void create_circuit(int M, vector<int> A)
{
vector<vector<int>> adj(M + 1);
const int N = A.size();
A.push_back(0);
C = vector<int>(M + 1, -1);
make_connections(A.size());
simulate(A);
answer(C, X, 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... |