Submission #1221886

#TimeUsernameProblemLanguageResultExecution timeMemory
1221886boclobanchatMechanical Doll (IOI18_doll)C++20
100 / 100
45 ms10764 KiB
#include"doll.h" #include<bits/stdc++.h> using namespace std; const int MAXN=1e6+69; bool ck[MAXN]; int val[MAXN],w[MAXN]; void create_circuit(int M,vector<int> A) { A.push_back(0); int n=A.size(),lg=1,cnt=0,c=0; while(lg<n) lg*=2,c++; for(int i=lg-n+1;i<=lg;i++) { int pos=i+lg-1; while(pos) ck[pos]=true,pos/=2; } for(int i=1;i<lg*2;i++) if(ck[i]) val[i]=++cnt; vector<int> x,y,e; for(int i=0;i<=M;i++) e.push_back(-1); for(int i=1;i<lg;i++) if(ck[i]) { if(!ck[i*2]) x.push_back(-1); else if(i*2<lg) x.push_back(-val[i*2]); else x.push_back(0); if(!ck[i*2+1]) y.push_back(-1); else if(i*2+1<lg) y.push_back(-val[i*2+1]); else y.push_back(0); } int it=0; for(int i=0;i<lg;i++) { int v=i,res=0; for(int j=0;j<c;j++) res=res*2+v%2,v/=2; if(ck[res+lg]) { if(res%2==0) x[val[(res+lg)/2]-1]=A[it++]; else y[val[(res+lg)/2]-1]=A[it++]; } } answer(e,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...