Submission #525192

#TimeUsernameProblemLanguageResultExecution timeMemory
525192qwerasdfzxcl자동 인형 (IOI18_doll)C++14
24 / 100
98 ms15524 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; vector<int> C, X, Y, Q[100100]; int l; vector<int> nxt; void build_tree(int i, int root, int H, int val, bool on){ if (on && (val&(1<<H))) X[i] = -root; else if (H){ X.push_back(1e9); Y.push_back(1e9); X[i] = -(int)X.size(); build_tree((int)X.size()-1, root, H-1, val, 0); } else X[i] = nxt[l++]; if (H){ X.push_back(1e9); Y.push_back(1e9); Y[i] = -(int)X.size(); build_tree((int)X.size()-1, root, H-1, val, on&1); } else Y[i] = nxt[l++]; } void create_circuit(int M, std::vector<int> A) { int n = A.size(); C.resize(M+1); A.push_back(0); C[0] = A[0]; for (int i=0;i<n;i++) Q[A[i]].push_back(A[i+1]); for (int i=1;i<=M;i++){ if (Q[i].empty()) continue; if (Q[i].size()==1) {C[i] = Q[i][0]; continue;} l = 0, nxt = Q[i]; X.push_back(1e9); Y.push_back(1e9); C[i] = -(int)X.size(); int t = 1, h = 0; for (;t<(int)Q[i].size();t<<=1, h++); build_tree((int)X.size()-1, (int)X.size(), h-1, t-(int)Q[i].size(), 1); } 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...