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 <iostream>
#include <vector>
#include "doll.h"
#include <functional>
#include <cassert>
using namespace std;
/*void answer(vector<int> C, vector<int> X, vector<int> Y){
return;
}*/
void create_circuit(int M, vector<int> A) {
int N = A.size();
int cs = 1;
vector<int> C(M + 1);
vector<int> X (2*N, 0), Y(2*N, 0);
C[0] = A[0];
auto ghbit = [&](int n){
int hbit = 0;
for(int bit = 0; bit < 30; bit++) if((n & (1<<bit)) != 0) hbit = bit;
return hbit;
};
auto buildfull = [&](auto&& self, int height){
int root = cs;
cs++;
if(height == 1) return;
X[root] = -cs;
self(self, height-1);
Y[root] = -cs;
self(self, height-1);
};
function<void(int, int)> buildpartial = [&](int n, int height)->void{
int root = cs;
cs++;
if(height == 1) return;
if(n >= 1<<(height-1)){
X[root] = -cs;
buildfull(buildfull, height-1);
if(n - (1<<(height-1)) > 0){
Y[root] = -cs;
buildpartial(n - (1<<(height-1)), height-1);
}
else Y[root] = -1;
}
else{
X[root] = -cs;
buildpartial(n, height-1);
Y[root] = -1;
}
cs++;
};
buildpartial(N, ghbit(N)+1);
for(int rooter = 1; rooter <= M; rooter++) C[rooter] = -1;
int ca = 1;
vector<bool> sparity (2*N, 0);
int c = A[0];
while(true){
if(c >= 0) c = C[c];
else{
int oc = c;
if(sparity[-c] == false){
if(X[-c] == 0){
if(ca == N){
assert(false);
}
X[-c] = A[ca++];
}
c = X[-c];
}
else if(sparity[-c] == true){
if(Y[-c] == 0){
if(ca == N){
Y[-c] = 0;
goto ans;
}
Y[-c] = A[ca++];
}
c = Y[-c];
}
sparity[-oc] = !sparity[-oc];
}
}
ans:
answer(C, X, Y);
}
/*int main(){
vector<int> A = {1,2,3,4,5,6,7,8,9,10};
create_circuit(5, A);
}*/
# | 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... |