# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1094519 | Math4Life2020 | Mechanical Doll (IOI18_doll) | C++17 | 83 ms | 9456 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 "doll.h"
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int,int>;
const int INF = 1e9;
int v2(int x) {
return __builtin_ctz(x);
}
int l2(int x) {
return (31-__builtin_clz(x));
}
void create_circuit(int M, vector<int> A) {
int N = A.size();
vector<int> C;
C.push_back(A[0]);
for (int i=0;i<M;i++) {
C.push_back(-1);
}
vector<int> X,Y;
int CIND = 0;
int D = l2(2*N-1);
stack<pii> bd;
bd.push({N,D});
while (!bd.empty()) {
pii p0 = bd.top(); bd.pop();
int k = p0.first; int d = p0.second;
if (d<=1) {
if (k==1) {
X.push_back(0);
Y.push_back(-INF);
} else if (k==2) {
X.push_back(-INF);
Y.push_back(-INF);
} else {
cout << "reporting error #1\n";
}
} else {
if (k>(1<<(d-1))) {
Y.push_back(CIND+1);
X.push_back(CIND+(1<<(d-1)));
bd.push({k-(1<<(d-1)),d-1});
bd.push({(1<<(d-1)),d-1});
} else {
X.push_back(0);
Y.push_back(CIND+1);
bd.push({k,d-1});
}
}
CIND++;
}
/*cout << "INIT: print C:\n";
for (int c: C) {
cout << c <<" ";
}
cout << "\nprint X: \n";
for (int x: X) {
cout << x << " ";
}
cout << "\nprint Y: \n";
for (int y: Y) {
cout << y << " ";
}*/
vector<bool> st;
for (int t=0;t<(1e6);t++) {
st.push_back(false);
}
for (int t=0;t<N;t++) {
int cx = 0;
int locp = -1;
bool stp = 0;
while (cx >= 0) {
if (st[cx]==0) {
st[cx]=1;
locp = cx;
stp = 0;
cx = X[cx];
} else {
st[cx]=0;
locp = cx;
stp = 1;
cx = Y[cx];
}
}
if (cx != -INF) {
cout << "invalid value\n";
} else {
int nval;
if (t<(N-1)) {
nval = A[t+1];
} else {
nval = 0;
}
nval++;
if (stp==0) {
X[locp]=-INF+nval;
} else {
Y[locp]=-INF+nval;
}
}
}
for (int d=0;d<X.size();d++) {
if (X[d]>=0) {
X[d]=-1-X[d];
} else {
X[d]=X[d]-(-INF+1);
}
if (Y[d]>=0) {
Y[d]=-1-Y[d];
} else {
Y[d]=Y[d]-(-INF+1);
}
}
/*cout << "print C:\n";
for (int c: C) {
cout << c <<" ";
}
cout << "\nprint X: \n";
for (int x: X) {
cout << x << " ";
}
cout << "\nprint Y: \n";
for (int y: Y) {
cout << y << " ";
}
cout << "\n";*/
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... |