제출 #1236290

#제출 시각아이디문제언어결과실행 시간메모리
1236290PlayVoltzMechanical Doll (IOI18_doll)C++20
9 / 100
45 ms14368 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; #define pii pair<int, int> #define mp make_pair #define pb push_back #define fi first #define se second int m; vector<int> vect, x, y; vector<pii> ord; void dnc(int node, int d){ if (d){ x[node-1]=-2*node; y[node-1]=-2*node-1; dnc(2*node, d-1); dnc(2*node+1, d-1); } else ord.pb(mp(node-1, 0)), ord.pb(mp(node-1, 1)); } void create_circuit(int M, vector<int> A){ m=M; vect=A; vect.pb(-1); vector<int> c(m+1, -1); int dep=ceil(log2(vect.size())); x.resize((1<<dep)-1, -1); y.resize((1<<dep)-1, -1); dnc(1, dep-1); vector<bool> done(ord.size(), 0); while (vect.size()<ord.size())vect.pb(-1); for (int i=19, p=0; i>=0&&p<vect.size(); --i){ vector<int> id; for (int j=0; j<ord.size(); j+=(1<<i))if (!done[j])id.pb(j); if (!(id.size()%2)){ for (int j=0; j<id.size()/2; ++j){ if (ord[id[j]].se)y[ord[id[j]].fi]=vect[p], ++p; else x[ord[id[j]].fi]=vect[p], ++p; if (ord[id[j+id.size()/2]].se)y[ord[id[j+id.size()/2]].fi]=vect[p], ++p; else x[ord[id[j+id.size()/2]].fi]=vect[p], ++p; done[id[j]]=done[id[j+id.size()/2]]=1; } } } y[y.size()-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...