제출 #1240705

#제출 시각아이디문제언어결과실행 시간메모리
1240705nikdMechanical Doll (IOI18_doll)C++20
16 / 100
48 ms11192 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; void create_circuit(int M, std::vector<int> A) { vector<vector<int>> next(M+1); next[0].push_back(A[0]); int n = A.size(); for(int i = 0; i<n-1; i++){ next[A[i]].push_back(A[i+1]); } next[A[n-1]].push_back(0); int s = 0; vector<int> c(M+1); vector<int> x, y; for(int i = 0; i<=M; i++){ if(next[i].empty()) c[i] = 0; else if(next[i].size() == 1) c[i] = next[i][0]; else{ c[i] = -(++s); int idx = 0; auto build = [&](auto&& build, int pow2, int md)->void{ int md1 = md; int md2 = md+pow2; pow2 <<= 1; if(next[i].size()<= pow2){ int dlt = pow2-next[i].size(); x.push_back((md1 < dlt ? c[i] : next[i][md1-dlt])); y.push_back((md2 < dlt ? c[i] : next[i][md2-dlt])); } else{ x.push_back(-(++s)); y.push_back(-(++s)); build(build, pow2, md1); build(build, pow2, md2); } }; build(build, 1, 0); } } answer(c, x, y); //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...