제출 #500012

#제출 시각아이디문제언어결과실행 시간메모리
500012sidon자동 인형 (IOI18_doll)C++17
0 / 100
3 ms4556 KiB
#include <bits/stdc++.h> using namespace std; #include "doll.h" vector<int> s, x(1<<18), y(1<<18), a; int cnt, v, b, ind, rt; int next() { int j = 0; for(int k = 0; k < b; k++) if(v & (1<<k)) j |= 1<<(b-k-1); s[j+=ind] = -rt-1, ++v; return j; } int dfs(int l, int r, int u) { if(r - l > 2) { int m = (l + r) / 2; x[u] = -1-dfs(l, m, cnt++); y[u] = -1-dfs(m, r, cnt++); } else { x[u] = a[next()]; y[u] = a[next()]; } return u; } void create_circuit(int M, vector<int> A) { int N = A.size(); s.resize(M+1), a = A; for(b = 0; b < 20; b++){ if(N & (1<<b)){ s[rt] = -cnt++-1; rt = cnt-1, v = 0; dfs(0, 1<<b, rt); rt = a[(ind+=1<<b)-1]; } } s[rt] = 0; x.resize(cnt); y.resize(cnt); answer(s, 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...