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;
void make_connections(int cnt, int dest)
{
int origo = -X.size() - 1;
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(dest);
}
else
{
X.push_back(--lastSwitch);
label[i*2] = lastSwitch;
}
}
else
{
X.push_back(origo);
}
if ((2 * i | 1) >= nt)
{
if ((2 * i | 1) == 2 * nt - 1)
{
Y.push_back(0);
}
else
{
Y.push_back(dest);
}
}
else
{
label[(2*i|1)] = --lastSwitch;
Y.push_back(lastSwitch);
}
}
Y.back() = 0;
}
void create_circuit(int M, vector<int> A)
{
if (M > 1)
return;
C = vector<int>(M + 1);
C[0] = A[0];
C[1] = -1;
make_connections(A.size(), A[0]);
answer(C, X, Y);
}
# | 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... |