Submission #139883

#TimeUsernameProblemLanguageResultExecution timeMemory
139883almogwaldMechanical Doll (IOI18_doll)C++14
84 / 100
142 ms8868 KiB
#include <utility> #include <algorithm> #include <math.h> #include <vector> #include <set> #include <iostream> //#include "job.h" #include "doll.h" #define fori(i,n) for(int i=0;i<n;i++) #define forn(i,n) for(int i=1;i<n;i++) #define forib(i,n) for(int i=n-1;i>=0;i--) #define fornb(i,n) for(int i=n-1;i>0;i--) #define maxl 10000000000 #define con continue; typedef long long lol; using namespace std; typedef vector<int> veci; typedef pair<lol,lol> point; lol sum=0; void create_circuit(int M, std::vector<int> A) { int N = A.size(); std::vector<int> C(M + 1); C[0] = A[0]; for (int i = 1; i <= M; ++i) { C[i] = -1; } vector<int> x, y; if(N==1){ x.push_back(-1); y.push_back(0); answer(C, x, y); } A.push_back(0); int num=0; while(1<<num < N){ num++; } veci depth,state; depth.push_back(num); x.push_back(0); state.push_back(0); y.push_back(0); int cur=0; int n=N; while(depth[cur]>1){ if(n+(1<<(depth[cur]-1))<=(1<<num)){ x[cur]=-1; n+=1<<(depth[cur]-1); }else{ x[cur]=-(1+x.size()); depth.push_back(depth[cur]-1); x.push_back(0); state.push_back(0); y.push_back(0); } y[cur]=-(1+x.size()); depth.push_back(depth[cur]-1); x.push_back(0); state.push_back(0); y.push_back(0); cur++; } if(n<(1<<num)){ x[cur]=-1; } int p=1; cur=-1; while(p<=N){ int lcur=-cur-1; state[lcur]=1-state[lcur]; if(state[lcur]){ lcur=x[lcur]; }else{ lcur=y[lcur]; } if(lcur==0){ lcur=-cur-1; if(state[lcur]){ x[lcur]=A[p++]; }else{ y[lcur]=A[p++]; } lcur=-1; } cur =lcur; } 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...