Submission #880576

#TimeUsernameProblemLanguageResultExecution timeMemory
880576andrei_boacaMechanical Doll (IOI18_doll)C++17
100 / 100
104 ms19744 KiB
#include "doll.h" #include <bits/stdc++.h> //#include "grader.cpp" using namespace std; typedef long long ll; typedef pair<int,int> pii; int n; const int INF=1e9; vector<int> vecini[100005]; vector<int> C,X,Y; vector<int> v; int lft[500005],rgt[500005]; int s; int state[500005]; int added=0; int build(int st,int dr,int a,int b) { if(dr<a||st>b) return -INF; if(st==dr) return INF; int mij=(st+dr)/2; int l=build(st,mij,a,b); int r=build(mij+1,dr,a,b); s++; lft[s]=l; rgt[s]=r; return -s; } int plsmake() { if(v.size()==1) return v[0]; int lg=v.size(); int L=lg; while(__builtin_popcount(L)>1) L++; int root=build(1,L,L-lg+1,L); vector<pii> ord; for(int z=1;z<=L;z++) { int nod=abs(root); while(true) { if(state[nod]==0) { state[nod]^=1; if(lft[nod]==-INF) break; if(lft[nod]==INF) { ord.push_back({nod,0}); break; } nod=-lft[nod]; continue; } else { state[nod]^=1; if(rgt[nod]==-INF) break; if(rgt[nod]==INF) { ord.push_back({nod,1}); break; } nod=-rgt[nod]; continue; } } } for(int i=0;i<v.size();i++) { int nod=ord[i].first,dir=ord[i].second; if(dir==0) lft[nod]=v[i]; else rgt[nod]=v[i]; } return root; } void create_circuit(int M, std::vector<int> A) { C.resize(M+1); n=A.size(); C[0]=A[0]; for(int i=1;i<A.size();i++) v.push_back(A[i]); v.push_back(0); int r=plsmake(); for(int i=1;i<=M;i++) C[i]=r; for(int i=1;i<=s;i++) { if(lft[i]==-INF) lft[i]=r; X.push_back(lft[i]); Y.push_back(rgt[i]); } answer(C,X,Y); }

Compilation message (stderr)

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