Submission #1195422

#TimeUsernameProblemLanguageResultExecution timeMemory
1195422stdfloatMechanical Doll (IOI18_doll)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h> #include "doll.h" // #include "grader.cpp" using namespace std; #define sz(v) (int)v.size() int lg, lmt, ind; vector<bool> need, R; vector<int> a, v, C; void f(int x, int l) { if (l == lg + 1) { x = -x; v[x] = a[ind++]; // cout << "xind " << x << ' ' << v[x] << endl; if (!v[x]) { map<int, int> m; for (int i = 1; i <= lmt; i++) if (need[i]) { m[i] = sz(m) + 1; // cout << i << ' ' << m[i] << endl; } // cout << endl; vector<int> X(sz(m)), Y(sz(m)); for (int i = 1; i <= lmt; i++) { if (need[i] && !~v[i]) { int ch = i << 1; Y[m[i] - 1] = (~v[ch] ? v[ch] : -m[ch]); X[m[i] - 1] = (~v[ch + 1] ? v[ch + 1] : -(!need[ch + 1] ? 1 : m[ch + 1])); // cout << i << ' ' << ch << ' ' << -m[i] << ' ' << X[m[i] - 1] << ' ' << Y[m[i] - 1] << endl; } } answer(C, X, Y); return; } return f(-1, 0), void(); } x = -x; int ch = x << 1; if (R[x]) { R[x] = false; if (!need[ch + 1]) f(-1, 0); else f(-(ch + 1), l + 1); } else { R[x] = true; f(-ch, l + 1); } } void create_circuit(int m, vector<int> A) { if (sz(A) == 1) { vector<int> C(m + 1); C[0] = A[0]; return answer(C, {}, {}), void(); } a = A; C.assign(m + 1, -1); C[0] = a[0]; a.erase(a.begin()); a.push_back(0); int n = sz(a); lg = __lg(n - 1); lmt = (1 << (lg + 1)) + n - 1; need.assign(1 << (lg + 2), 0); for (int i = 1; i <= lmt; i++) { int x = i; for (int j = 0; j <= lg - __lg(i) && x <= lmt; j++) x <<= 1; need[i] = x <= lmt; } v.assign(1 << (lg + 2), -1); R.assign(lmt + 1, true); f(-1, 0); }
#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...