Submission #1210265

#TimeUsernameProblemLanguageResultExecution timeMemory
1210265loiiii12358Mechanical Doll (IOI18_doll)C++20
18 / 100
56 ms9884 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> X={0},Y={0};

void solve(int id,int d,vector<int> a){
  vector<int> l,r;
  int cnt=int(a.size())-(1<<d),pt=0;
  for(int i=0;i<2*(1<<d);i++){
    // cout << i << ' ' << l.size() << ' ' << r.size() << endl;
    if(i%2==0){
      if(cnt>0){
        l.push_back(a[pt++]);
        cnt--;
      }
    }else if(pt<a.size()){
      r.push_back(a[pt++]);
    }
  }
  // cout << id << ' ' << d << endl;
  // for(int i=0;i<a.size();i++){
  //   cout << a[i] << " ";
  // }
  // cout << endl;
  // for(int i=0;i<l.size();i++){
  //   cout << l[i] << " ";
  // }
  // cout << endl;
  // for(int i=0;i<r.size();i++){
  //   cout << r[i] << " ";
  // }
  // cout << endl << endl;
  if(l.size()==0){
    X[id]=-1;
  }else if(d==0){
    X[id]=l[0];
  }else{
    int tmp=X.size();
    X[id]=-tmp-1;
    X.push_back(0);Y.push_back(0);
    solve(tmp,d-1,l);
  }
  if(d==0){
    Y[id]=r[0];
  }else{
    int tmp=X.size();
    Y[id]=-tmp-1;
    X.push_back(0);Y.push_back(0);
    solve(tmp,d-1,r);
  }
}

void create_circuit(int M, vector<int> A) {
  A.push_back(0);
  for(int i=1;i<20;i++){
    if((1<<i)>=A.size()){
      solve(0,i-1,A);
      break;
    }
  }
  vector<int> C(M+1,-1);
  answer(C, X, Y);
}

//9 -> 16
//
#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...