#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);
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;
X.push_back(M + 1);
Y.push_back(M + 1);
for (int j = 0; j < x - 1; j++)
{
int row = log2(j + 1), row2 = log2(x) - 1;
int pos = j - (1 << row2) + 1;
if (row < row2 || (row == row2 && rev(pos, row2 + 1) < x - pow(2, row2 + 1)))
{
X[j + last] = -X.size() - 1;
X.push_back(M + 1);
Y.push_back(M + 1);
}
else
X[j + last] = exits[i][rev(pos, row + 1)];
if (row < row2 || (row == row2 && rev(2 * pos + 1, row2 + 1) < x - pow(2, row2 + 1)))
{
Y[j + last] = -X.size() - 1;
X.push_back(M + 1);
Y.push_back(M + 1);
}
else
Y[j + last] = exits[i][rev(2 * pos + 1, row + 1)];
}
}
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... |