제출 #1237421

#제출 시각아이디문제언어결과실행 시간메모리
1237421noyancanturkMechanical Doll (IOI18_doll)C++20
6 / 100
59 ms13496 KiB
#include "doll.h" #include<bits/stdc++.h> using namespace std; #define pb push_back using pii=pair<int,int>; const int lim=2e5+100; vector<int>going[lim]; vector<int>x,y; int build(vector<pii>need,int bit){ // cerr<<"here\n"; // for(auto[x,y]:need){ // cerr<<x<<' '<<y<<'\n'; // } if(need.size()==1){ return need[0].second; } int ind=x.size(); x.pb(0);y.pb(0); vector<pii>ok[2]; for(pii xx:need){ ok[(xx.first>>bit)&1].pb(xx); } x[ind]=build(ok[0],bit+1); y[ind]=build(ok[1],bit+1); 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]}); } c[i]=build(need,0); } 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...