제출 #1333583

#제출 시각아이디문제언어결과실행 시간메모리
1333583Faisal_SaqibMechanical Doll (IOI18_doll)C++17
0 / 100
1 ms344 KiB
#include "doll.h"
#include <iostream>
#include <algorithm>
using namespace std;
vector<int> og;
int s=1;
vector<int> x,y;
int recur(int l,int r)
{
  if(l==r)
  {
    return og[l];
  }
  int mid=(l+r)/2;
  int p=x.size();
  x.push_back(-1);
  y.push_back(-1);
  int lc=recur(l,mid),rc=recur(mid+1,r);
  x[p]=lc;
  y[p]=rc;
  return -p-1;
}
vector<int> perm(vector<int> a)
{
  if(a.size()==1)
  {
    return a;
  }
  int n=a.size();
  vector<int> cur[2];
  for(int i=0;i<n;i++)
  {
    cur[i%2].push_back(a[i]);
  }
  vector<int> fp=perm(cur[0]);
  vector<int> sp=perm(cur[1]);
  fp.insert(fp.end(),sp.begin(),sp.end());
  return fp;
}
void create_circuit(int m, std::vector<int> a) {
  x.clear();
  y.clear();
  int n=a.size();
  s=1;
  while((1<<__lg(n+1))!=(n+1))
  {
    a.push_back(-s);
    x.push_back(-s);
    s++;
    n++;
  }
  a.push_back(0);
  n++;
  // cout<<n<<endl;
  og=perm(a);
  // for(auto x:og)
  // {
  //   cout<<x<<' ';
  // }
  // cout<<endl;
  // answea
  while(y.size()<x.size())y.push_back(-s);
  vector<int>c(m+1,-s);
  recur(0,n-1);
  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...