#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 << " ";
}*/
bool st[X.size()];
for (int t=0;t<N;t++) {
st[t]=0;
}
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);
}
/*int main() {
create_circuit(4,{1,2,3,4,5});
}*/
Compilation message
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:106:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
106 | for (int d=0;d<X.size();d++) {
| ~^~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
wrong motion |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
wrong motion |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
wrong motion |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
344 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
44 ms |
4696 KB |
Output is correct |
3 |
Correct |
42 ms |
4472 KB |
Output is correct |
4 |
Correct |
64 ms |
6928 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
44 ms |
4696 KB |
Output is correct |
3 |
Correct |
42 ms |
4472 KB |
Output is correct |
4 |
Correct |
64 ms |
6928 KB |
Output is correct |
5 |
Incorrect |
68 ms |
7340 KB |
wrong motion |
6 |
Halted |
0 ms |
0 KB |
- |