Submission #1061437

#TimeUsernameProblemLanguageResultExecution timeMemory
1061437Joshua_AnderssonMechanical Doll (IOI18_doll)C++17
0 / 100
73 ms8560 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; const int inf = int(1e9); typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> p2; #define rep(i, high) for (int i = 0; i < high; i++) #define repp(i, low, high) for (int i = low; i < high; i++) #define repe(i, container) for (auto& i : container) #define sz(container) ((int)container.size()) #define all(x) begin(x),end(x) #if _LOCAL #define assert(x) if (!(x)) __debugbreak() #endif map<int,int> ind; vi state; vi x, y; int k = 17; void build_tree(int u, int d, vi& x, vi& y) { if (d==0) { x[u] = inf; y[u] = inf; return; } x[u] = u * 2; y[u] = u * 2 + 1; build_tree(u * 2, d - 1, x, y); build_tree(u * 2+1, d - 1, x, y); } void traverse(int u, int t) { int& v = state[u]?y[u]:x[u]; state[u] ^= 1; if (v==inf) { v = t; return; } traverse(v, t); } void create_circuit(int m, std::vector<int> a) { int n = sz(a); vi c(m + 1, -1); state.resize(1 << (k+1)); x.resize(1 << (k+1), inf); y.resize(1 << (k+1), inf); build_tree(1, k, x, y); rep(i, n) { traverse(1, a[i]); } repp(i, n, (1 << (k+1))-1) { traverse(1, -1); } traverse(1, 0); rep(i, 1 << k) x[i] *= -1, y[i] *= -1; repp(i, 1<<k, sz(x)) { if (x[i] == inf) x[i] = -1; if (y[i] == inf) y[i] = -1; } x.erase(x.begin()); y.erase(y.begin()); 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...