Submission #96201

#TimeUsernameProblemLanguageResultExecution timeMemory
96201lycMechanical Doll (IOI18_doll)C++14
53 / 100
251 ms112960 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; const int MAXM = 100005; deque<int> nxt[MAXM]; int S = -1; vector<int> C, X, Y; int bindec(string bin) { reverse(bin.begin(), bin.end()); int dec = 0; for (auto c : bin) { dec *= 2; dec += c-'0'; } //cout << bin << "-> " << dec << endl; return dec; } void build(int rt, int i, int s, int e, string rec) { if (s > e) return; //cout << "BUILD " << rt << ' ' << i << ' ' << s << ' ' << e << " : " << rec << endl; if (s == e) { if (i == rt) { C[i] = nxt[rt][bindec(rec)]; } else { X[-i] = i; Y[-i] = nxt[rt][bindec(rec)]; //X.push_back(rt); //Y.push_back(nxt[rt][bindec(rec)]); } } else if (s+1 == e && i != rt) { X[-i] = nxt[rt][bindec(rec+'0')]; Y[-i] = nxt[rt][bindec(rec+'1')]; //X.push_back(nxt[rt][bindec(rec+'0')]); //Y.push_back(nxt[rt][bindec(rec+'1')]); } else { int m = (s+e)/2; if (i >= 0) { C[i] = S--; build(rt, C[i], s, e, rec); } else { int l = S; build(rt, S--, s, m, rec+'0'); int r = S; build(rt, S--, m+1, e, rec+'1'); //X.push_back(l); //Y.push_back(r); X[-i] = l; Y[-i] = r; //cout << "BRANCH " << i << " " << X[-i] << " " << Y[-i] << endl; } } } void create_circuit(int M, std::vector<int> A) { int N = A.size(); C.resize(M+1); A.push_back(0); for (int i = 0; i <= N; ++i) { nxt[A[i]].push_back(A[(i+1)%(N+1)]); } X.resize(2*N); Y.resize(2*N); for (int i = 0; i <= M; ++i) { while (true) { int sz = (int)nxt[i].size(); if (sz - (sz&-sz) > 0) nxt[i].push_front(S); else break; } build(i, i, 0, (int)nxt[i].size()-1, ""); //cout << i << ": "; for (auto x : nxt[i]) cout << x << ' '; cout << endl; } vector<int> XX, YY; for (int i = 1; i < -S; ++i) { XX.push_back(X[i]); YY.push_back(Y[i]); } //cout << endl; //for (auto x : C) cout << x << ' '; cout << endl; //for (auto x : XX) cout << x << ' '; cout << endl; //for (auto x : YY) cout << x << ' '; cout << endl; answer(C, XX, YY); }
#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...