Submission #107348

#TimeUsernameProblemLanguageResultExecution timeMemory
107348PeppaPigMechanical Doll (IOI18_doll)C++14
100 / 100
172 ms10472 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; const int N = 2e5+5; const int INF = 1e9+1; int n, m, ptr; vector<int> C, X, Y; int solve(vector<int> &V) { if((int)V.size() == 1 || (V[0] == -INF && V.back() == -INF)) return V[0]; vector<int> L, R; for(int i = 0; i < (int)V.size(); i++) { if(i & 1) R.emplace_back(V[i]); else L.emplace_back(V[i]); } int l = solve(L), r = solve(R); X.emplace_back(l), Y.emplace_back(r); return --ptr; } void create_circuit(int M, vector<int> A) { A.emplace_back(0); n = A.size(), m = M; int L = 0, sz; while((1 << L) < (int)A.size()) ++L; sz = 1 << L; vector<int> V; for(int i = 0; i < sz; i++) { int pos = 0; for(int j = 0; j < L; j++) pos += (i >> j & 1) << (L - j - 1); V.emplace_back(pos >= sz - n); } for(int i = 0, idx = 0; i < sz; i++) { if(V[i]) V[i] = A[idx++]; else V[i] = -INF; } int root = solve(V); C = vector<int>(m+1, root); for(int &v : X) if(v == -INF) v = root; for(int &v : Y) if(v == -INF) v = root; 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...