Submission #1241782

#TimeUsernameProblemLanguageResultExecution timeMemory
1241782AdrianoMechanical Doll (IOI18_doll)C++17
100 / 100
72 ms11316 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; vector<int> C, X, Y, state; int s_count = 0; void simulate_and_form(int &idx, const int original_count, int &left, const vector<int> &d_adj, const int &root, int &offset) { int count = original_count; while ( offset < d_adj.size() ) { if ( root == idx ) count = original_count; if (-idx > s_count) { ++s_count; X.push_back(0), Y.push_back(0), state.push_back(0); } state[-idx - 1] = !state[-idx - 1]; // When X if( state[-idx - 1] ) // State is X or Y { if ( 0 == X[-idx - 1] ) // Is X for this idx defined? { if ( count/2 <= left ) // Unnecesary switch? { X[-idx - 1] = root; left -= count/2; idx = root, count = original_count; continue; } else if ( 1 == count/2 ) // Leaf? { X[-idx - 1] = d_adj[offset++]; idx = root; continue; } else // Just continue down { X[-idx - 1] = -s_count - 1; } } if ( 2 < count ) idx = X[-idx - 1], count /= 2; // This will simulate going down else idx = root; } // When Y else { if ( 0 == Y[-idx - 1] ) // Is Y for this idx defined? { if ( 1 == count/2 ) // Leaf? { Y[-idx - 1] = d_adj[offset++]; idx = root, count = original_count; continue; } else // Just continue down Y[-idx - 1] = -s_count - 1; } if ( 2 < count ) idx = Y[-idx - 1], count /= 2; // Same as in if above else idx = root, count = original_count; } } return; } void create_circuit(int M, vector<int> A) { vector< vector<int> > directed_adj(M+1); C.assign(M+1, -1); A.push_back(0); int log2 = log( A.size()-1 ) / log(2) + 1; int left = (1<<log2) - A.size(); int idx = -1, offset = 0, root = idx; simulate_and_form(idx, (1<<log2), left, A, root, offset); answer(C, X, Y); return; }
#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...