제출 #1041009

#제출 시각아이디문제언어결과실행 시간메모리
1041009NeroZein자동 인형 (IOI18_doll)C++17
76.59 / 100
97 ms10668 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; int idd; int n, m; vector<int> a; vector<int> state; vector<int> c, x, y; void build(int nd, int l, int r, int elements) { assert(l != r); int mid = (l + r) >> 1; int sz = 1; while (sz * 2 <= min(elements, r - mid)) { sz *= 2; } //cerr << "ND, l, r, elements: " << nd << ' ' << l << ' ' << r << ' ' << elements << endl; if (mid + 1 < r) { int rx = --idd; x.push_back(0); y.push_back(0); y[-nd - 1] = rx; build(rx, mid + 1, r, sz); } //cerr << "sz: " << sz << endl; if (sz == elements) { x[-nd - 1] = -1; } else if (l < mid) { int lx = --idd; x.push_back(0); y.push_back(0); x[-nd - 1] = lx; build(lx, l, mid, elements - sz); } } void dfs(int v, int ptr) { //cerr << "V, ptr: " << v << ' ' << ptr << endl; if (v == 0) { //assert(ptr == n); return; } if (v > 0) { dfs(c[v], ptr + 1); } else { if (state[-v - 1] == 0) { if (!x[-v - 1]) { x[-v - 1] = a[ptr]; } state[-v - 1] ^= 1; dfs(x[-v - 1], ptr); } else { if (!y[-v - 1]) { y[-v - 1] = a[ptr]; } state[-v - 1] ^= 1; dfs(y[-v - 1], ptr); } } } void create_circuit(int m_, vector<int> a_) { m = m_; a = a_; a.push_back(0); n = (int) a.size(); idd = -1; x.push_back(0); y.push_back(0); int b = 1; while (b < n) { b *= 2; } build(-1, 0, b - 1, n); c.assign(m + 1, -1); state.resize(-idd); dfs(-1, 0); answer(c, x, y); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...