Submission #1210284

#TimeUsernameProblemLanguageResultExecution timeMemory
1210284loiiii12358Mechanical Doll (IOI18_doll)C++20
100 / 100
77 ms10788 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; int pt=0; vector<int> a,X={0},Y={0}; vector<bool> states; void solve(int id,int d,int len){ // cout << id << ' ' << d << ' ' << len << '\n'; int cnt=len-(1<<d); if(cnt<=0){ X[id]=-1; }else if(d==0){ X[id]=0; }else{ int tmp=X.size(); X[id]=-tmp-1; X.push_back(0);Y.push_back(0); solve(tmp,d-1,cnt); } if(d==0){ Y[id]=0; }else{ int tmp=X.size(); Y[id]=-tmp-1; X.push_back(0);Y.push_back(0); solve(tmp,d-1,min(1<<d,len)); } } void run(int now){ // cout << now << endl; if(pt==a.size()){ return; } if(now==0){ return; }else if(states[-now-1]){ states[-now-1]=!states[-now-1]; if(Y[-now-1]==0){ Y[-now-1]=a[pt++]; run(-1); }else{ run(Y[-now-1]); } }else{ states[-now-1]=!states[-now-1]; if(X[-now-1]==0){ X[-now-1]=a[pt++]; run(-1); }else{ run(X[-now-1]); } } } void create_circuit(int M, vector<int> A) { A.push_back(0); a=A; for(int i=1;i<20;i++){ if((1<<i)>=A.size()){ solve(0,i-1,A.size()); break; } } states.resize(X.size(),false); run(-1); vector<int> C(M+1,-1); answer(C, X, Y); } //9 -> 16 //
#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...