Submission #109372

#TimeUsernameProblemLanguageResultExecution timeMemory
109372nvmdava자동 인형 (IOI18_doll)C++17
0 / 100
15 ms9928 KiB
#include "doll.h" #include <bits/stdc++.h> #define pb push_back using namespace std; vector<int> aft[200005], C, X, Y, st; int sz = 0; int t; void go(int id, int root, int v, int cnt, int dep){ dep--; if(dep == 1){ if(cnt == 1){ X[-1 - v] = 1; Y[-1 - v] = root; } else if(cnt == 2){ X[-1 - v] = 1; Y[-1 - v] = 1; } return; } X[-1 - v] = --sz; Y[-1 - v] = cnt - (1 << dep) > 0 ? --sz : root; X.pb(0); Y.pb(0); st.pb(0); go(id, root, X[-1 - v], min(1 << dep, cnt), dep); if(Y[-1 - v] != root){ st.pb(0); X.pb(0); Y.pb(0); go(id, root, Y[-1 - v], cnt - (1 << dep), dep); } } void trav(int root, int id, int idd){ if(st[-1 - id] == 0){ if(X[-1 - id] == 1){ st[-1 - id] = 1; X[-1 - id] = aft[idd][t++]; trav(root, root, idd); } else { st[-1 - id] = 1; trav(root, X[-1 - id], idd); } } else { if(Y[-1 - id] == 1){ st[-1 - id] = 0; Y[-1 - id] = aft[idd][t++]; trav(root, root, idd); } else { st[-1 - id] = 0; trav(root, Y[-1 - id], idd); } } } void solve(int id){ if(!aft[id].size()) C[id] = 0; else if(aft[id].size() == 1) C[id] = aft[id][0]; else { t = 0; C[id] = --sz; X.pb(0); st.pb(0); Y.pb(0); int dep = ceil(log2(aft[id].size())); go(id, C[id], C[id], aft[id].size(), dep); trav(C[id], C[id], id); } } void create_circuit(int M, vector<int> A) { for(int i = 1; i < A.size(); i++) aft[A[i - 1]].pb(A[i]); aft[A.back()].pb(0); for(int i = 0; i <= M; i++) solve(i); answer(C, X, Y); }

Compilation message (stderr)

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:76:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |  for(int i = 1; i < A.size(); i++)
      |                 ~~^~~~~~~~~~
#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...