Submission #764237

#TimeUsernameProblemLanguageResultExecution timeMemory
764237t6twotwoMechanical Doll (IOI18_doll)C++17
47 / 100
75 ms9396 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; vector<int> ord(int lg) { int N = 1 << lg; vector<int> ans(N), s(N); int x = 1, t = 0; while (1) { if (x >= N) { ans[x - N] = t++; if (x == 2 * N - 1) { break; } x = 1; } else { if (s[x] == 0) { s[x] = 1; x = x * 2; } else { s[x] = 0; x = x * 2 + 1; } } } return ans; } void create_circuit(int M, vector<int> A) { int N = A.size(); int lg = __lg(N - 1) + 1; int K = 1 << lg; vector<int> C(M + 1, -1), X(K - 1, -1), Y(K - 1, -1); C[0] = A[0]; for (int i = 0; i < (K / 2) - 1; i++) { X[i] = ~(2 * i + 1); Y[i] = ~(2 * i + 2); } auto a = ord(lg); for (int i = 0; i < K / 2; i++) { if (a[i * 2] < N - 1) { X[i + K / 2 - 1] = A[a[i * 2] + 1]; } if (a[i * 2 + 1] < N - 1) { Y[i + K / 2 - 1] = A[a[i * 2 + 1] + 1]; } } Y[K - 2] = 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...