Submission #1237454

#TimeUsernameProblemLanguageResultExecution timeMemory
1237454noyancanturkMechanical Doll (IOI18_doll)C++20
53 / 100
161 ms75572 KiB
#include "doll.h" #include<bits/stdc++.h> using namespace std; #define pb push_back using pii=pair<int,int>; const int lim=2e6+100; vector<int>going[lim]; vector<int>x(lim,INT_MAX),y(lim,INT_MAX); int last=0; int build(vector<pii>need,int root){ if(need.size()==1){ if(need[0].second!=INT_MIN){ return need[0].second; } return root; } int ind=last++; if(root==1)root=-ind-1; vector<pii>ok0,ok1; for(auto[xx,yy]:need){ if((xx)&1)ok1.pb({xx/2,yy}); else ok0.pb({xx/2,yy}); } x[ind]=build(ok0,root); y[ind]=build(ok1,root); return -ind-1; } void create_circuit(int m,vector<int>a){ int n=a.size(); for(int i=0;i<n;i++){ if(i!=n-1){ going[a[i]].pb(a[i+1]); }else{ going[a[i]].pb(0); } } vector<int>c(m+1); c[0]=a[0]; for(int i=1;i<=m;i++){ if(!going[i].size())continue; vector<pii>need; for(int j=0;j<going[i].size();j++){ need.pb({j,going[i][j]}); } while(__builtin_popcount(need.size())!=1){ need.pb({INT_MIN,INT_MIN}); } sort(need.begin(),need.end()); for(int j=0;j<need.size();j++){ need[j].first=j; } c[i]=build(need,1); } while(x.back()==INT_MAX){ x.pop_back(); y.pop_back(); } answer(c,x,y); } // void create_circuit(int M, std::vector<int> A) { // int N = A.size(); // std::vector<int> C(M + 1); // C[0] = -1; // for (int i = 1; i <= M; ++i) { // C[i] = 1; // } // std::vector<int> X(N), Y(N); // for (int k = 0; k < N; ++k) { // X[k] = Y[k] = A[k]; // } // 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...