Submission #1037433

#TimeUsernameProblemLanguageResultExecution timeMemory
1037433aaaaaarrozMechanical Doll (IOI18_doll)C++17
100 / 100
249 ms28060 KiB
#include "doll.h" #include<bits/stdc++.h> using namespace std; #define vec vector #define int long long #define map unordered_map #define EMPTY 0 void create_circuit(int32_t M, std::vector<int32_t> A) { int N = A.size(); map<int, int> X, Y; int hb = -1; for(int i = 0; i<32; i++) { if(N & 1ll << i) hb = i; } assert(hb != -1); std::vector<int32_t> C(M + 1, -hb-1); int si = hb+2; auto tree = [&](int sz) { for(int i = 1; i<sz/2; i++) { X[i+si-1] = -(i*2 + si - 1); Y[i+si-1] = -(i*2 + 1 + si -1); } si += sz-1; }; for(int i = hb+1; i>=1; i--) { if((1ll<<(i-1)) & N) { if(i > 1) { X[i] = -si; tree(1ll << (i-1)); } } else { X[i] = -hb-1; } Y[i] = -i + 1; } vec<bool> state(N*3+10, false); vec<int32_t> a = A; a.push_back(1e9); int i = 0; int cur = 0; int cnt = 0; do { cnt++; int nxt; if(cur < 0) { state[-cur] = !state[-cur]; if(state[-cur]) { if(X.count(-cur) == 0) { X[-cur] = a[i++]; } nxt = X[-cur]; } else { if(Y.count(-cur) == 0) { Y[-cur] = a[i++]; } nxt = Y[-cur]; } } else { nxt = C[cur]; } cur = nxt; } while(cur != 0); int S = si; vec<int32_t> XA(si-1, 1e9); vec<int32_t> YA(si-1, 1e9); for(auto [i, val] : X) { XA[i-1] = val; } for(auto [i, val] : Y) { YA[i-1] = val; } answer(C, XA, YA); }

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int32_t, std::vector<int>)':
doll.cpp:67:10: warning: unused variable 'S' [-Wunused-variable]
   67 |      int S = si;
      |          ^
#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...