Submission #911727

#TimeUsernameProblemLanguageResultExecution timeMemory
911727biankMechanical Doll (IOI18_doll)C++14
100 / 100
167 ms16064 KiB
#include <bits/stdc++.h> #include "doll.h" using namespace std; #define SIZE(x) (int)x.size() #define forn(i,n) for(int i=0;i<int(n);i++) #define forsn(i,s,n) for(int i=int(s);i<int(n);i++) #define pb push_back typedef vector<int> vi; vi L, R, v, state; int t, skip, s; void build(int u, int l, int r) { L.pb(0), R.pb(0), v.pb(0); if(r-l<=skip) { v[u]=-1, skip-=r-l; return; } if(r-l==1) return; v[u]=--s; int m=(l+r)/2; build(L[u]=t++,l,m); build(R[u]=t++,m,r); } void dfs(int u, int a) { if(u&&v[u]==-1) dfs(0,a); else if(!v[u]) v[u]=a; else if(state[u]^=1) dfs(L[u],a); else dfs(R[u],a); } void create_circuit(int m, vi a) { vi c(m+1), x, y; c[0]=a[0]; int n=SIZE(a),sz=1; if(n==1) return answer(c,x,y); forsn(i,1,m+1) c[i]=-1; while(sz<n) sz*=2; skip=sz-n; build(t++,0,sz); a.pb(0),state.assign(t,0); forsn(i,1,n+1) dfs(0,a[i]); forn(i,t) if(L[i]||R[i]) x.pb(v[L[i]]),y.pb(v[R[i]]); 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...