이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> x;
vector<int> y;
void createTree (int v, int n, int next, int &count) {
if (n > next/2) {
if (next == 2) {
x[v] = -2;
y[v] = -2;
return;
}
x[v] = count+1;
y[v] = count+2;
count += 2;
createTree(x[v], next/2, next/2, count);
createTree(y[v], n-(next/2), next/2, count);
}
else {
if (next == 2) {
x[v] = -2;
y[v] = 0;
return;
}
x[v] = count+1;
y[v] = 0;
count += 1;
createTree(x[v], n, next/2, count);
}
}
void create_circuit(int M, vector<int> A) {
int N = A.size();
if (N == 1) {
vector<int> ans(M+1);
ans[0] = A[0];
answer(ans, {}, {});
return;
}
x.assign(2*N, -1);
y.assign(2*N, -1);
// x.push_back(-1);
// y.push_back(-1);
int next = 1;
while (next < N) {
next *= 2;
}
// cerr << next << "\n";
int count = 0;
createTree(0, N, next, count);
swap(x, y);
// cerr << count << "\n";
// for (int i = 0; i<N*2; i++) {
// cerr << x[i] << " " << y[i] << "\n";
// }
vector<int> c(M+1);
c[0] = A[0];
for (int i=1; i<=M; i++) c[i] = -1;
vector<bool> swi(2*N, 0);
A.push_back(0);
vector<int> finalX, finalY;
for (int i = 0; i<2*N; i++) {
finalX.push_back(-(x[i]+1));
finalY.push_back(-(y[i]+1));
}
// cerr << "\n";
// for (int i=0; i<2*N; i++) {
// cerr << finalX[i] << " " << finalY[i] << "\n";
// }
for (int i=1; i<=N; i++) {
int v = 0;
while (true) {
int now;
if(swi[v]) now = y[v];
else now = x[v];
if (now == -2) {
if(swi[v]) finalY[v] = A[i];
else finalX[v] = A[i];
swi[v] = !swi[v];
break;
}
swi[v] = !swi[v];
v = now;
}
}
// cerr << "\n";
// for (int i=0; i<2*N; i++) {
// cerr << finalX[i] << " " << finalY[i] << "\n";
// }
vector<int> resX(count+1);
vector<int> resY(count+1);
for (int i=0; i<=count; i++) {
resX[i] = finalX[i];
resY[i] = finalY[i];
}
answer(c, resX, resY);
}
# | 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... |