이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "doll.h"
using namespace std;
vector<int> C;
vector<int> X, Y;
int lastSwitch = 0;
int INF = 1 << 30;
void make_connections(int cnt)
{
int origo = -X.size() - 1;
int index = 0;
int nt = 1;
while (nt < cnt)
nt *= 2;
vector<int> st(2 * nt), label(2 * nt);
for (int i = 2 * nt - cnt; i < 2 * nt; i++)
st[i] = 1;
for (int i = nt - 1; i >= 1; i--)
st[i] = max(st[i*2], st[i*2|1]);
label[1] = --lastSwitch;
for (int i = 1; i < nt; i++)
{
if (!st[i]) continue;
if (st[i * 2])
{
if (i * 2 >= nt)
{
X.push_back(INF);
}
else
{
X.push_back(--lastSwitch);
label[i*2] = lastSwitch;
}
}
else
{
X.push_back(origo);
}
if ((2 * i | 1) >= nt)
{
Y.push_back(INF);
}
else
{
label[(2*i|1)] = --lastSwitch;
Y.push_back(lastSwitch);
}
}
}
void simulate(vector<int> &A)
{
int nxt = 0;
int index = C[0];
A.push_back(0);
vector<int> state(X.size());
while (index != 0)
{
if (index < 0)
{
if (!state[-index - 1])
{
state[-index-1] ^= 1;
if (X[-index-1] == INF)
{
X[-index-1] = A[nxt];
}
index = X[-index-1];
}
else
{
state[-index-1] ^= 1;
if (Y[-index-1] == INF)
Y[-index-1] = A[nxt];
index = Y[-index-1];
}
}
else
{
index = C[index];
nxt++;
}
}
}
void create_circuit(int M, vector<int> A)
{
vector<vector<int>> adj(M + 1);
const int N = A.size();
adj[0].push_back(A[0]);
for (int i = 0; i < N - 1; i++)
{
adj[A[i]].push_back(A[i+1]);
}
adj[A.back()].push_back(0);
C = vector<int>(M + 1);
for (int i = 0; i < M + 1; i++)
{
if (adj[i].size() > 1)
{
C[i] = -X.size() - 1;
make_connections(adj[i].size());
}
else if (adj[i].size() == 1)
C[i] = adj[i][0];
}
simulate(A);
answer(C, X, Y);
}
컴파일 시 표준 에러 (stderr) 메시지
doll.cpp: In function 'void make_connections(int)':
doll.cpp:14:6: warning: unused variable 'index' [-Wunused-variable]
14 | int index = 0;
| ^~~~~
# | 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... |