#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
int rev(int x, int b)
{
int ans = 0;
while (x)
{
b--;
ans *= 2;
ans += x % 2;
x /= 2;
}
while (b--)
ans *= 2;
return ans;
}
void create_circuit(int M, vector<int> A)
{
int N = A.size();
vector<vector<int>> exits(M + 1);
exits[0].push_back(A[0]);
for (int i = 0; i < N - 1; i++)
exits[A[i]].push_back(A[i + 1]);
exits[A.back()].push_back(0);
vector<int> X, Y, C(M + 1), state;
for (int i = 0; i <= M; i++)
{
int last = X.size();
int x = exits[i].size();
if (x == 0)
{
C[i] = 0;
continue;
}
C[i] = exits[i][0];
if (x == 1)
continue;
C[i] = -X.size() - 1;
int y = pow(2, ceil(log2(x)));
for (int j = 1; j < y; j++)
{
X.push_back(M + 1);
Y.push_back(M + 1);
state.push_back(0);
if (2 * i < y)
X[i] = -(last - 2 * i);
if (2 * i + 1 < y)
Y[i] = -(last + 2 * i + 1);
}
vector<int> targs(y - x, -last - 1);
for (int j = 0; j < x; j++)
targs.push_back(exits[i][j]);
for (int j = 0; j < y; j++)
{
int pos = last;
while (true)
{
state[pos] = 1 - state[pos];
if (state[pos])
{
if (X[pos] == M + 1)
{
X[pos] = targs[j];
break;
}
pos = X[pos];
}
else
{
if (Y[pos] == M + 1)
{
Y[pos] = targs[j];
break;
}
pos = Y[pos];
}
}
}
}
answer(C, X, Y);
}
/*int main()
{
int N, M;
cin >> N >> M;
vector<int> Tab(N);
for (int i = 0; i < N; i++)
cin >> Tab[i];
create_circuit(M, Tab);
}*/
# | 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... |