Submission #1237421

#TimeUsernameProblemLanguageResultExecution timeMemory
1237421noyancanturk자동 인형 (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...