Submission #1244831

#TimeUsernameProblemLanguageResultExecution timeMemory
12448312288Mechanical Doll (IOI18_doll)C++20
47 / 100
45 ms8972 KiB
#include "doll.h"

using namespace std;

#define ALL(x) begin(x),end(x)
#define pb push_back
#define F first
#define S second
// #define int long long

typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<bool> vb;
typedef vector<vi> vvi;
typedef vector<vii> vvii;
typedef vector<vb> vvb;

int rev_bit(int x, int l){
  int y=0;
  for (int i=0;i<l;i++){
    y=y*2+x%2;
    x/=2;
  }
  return y;
}

int ind_to_x(int i){
  return -i-1;
}

int gen(vi& X, vi& Y, vi& dest){
  int n=1,lgn=0;while(n<dest.size())(n*=2),lgn++;
  int xi = X.size()-1;
  vi dest2(n,ind_to_x(xi+1));

  for (int i=0;i+1<dest.size();i++)dest2[rev_bit(i,lgn)]=dest[i];
  dest2[n-1] = dest.back();

  for (int i=1;i<n/2;i++){
    X.pb(ind_to_x(xi+i*2));
    Y.pb(ind_to_x(xi+i*2+1));
  }

  for (int i=0;i<n;i+=2){
    X.pb(dest2[i]);
    Y.pb(dest2[i+1]);
  }
  return ind_to_x(xi+1);
}

void create_circuit(int m, std::vector<int> A) {
  int n = A.size();
  std::vector<int> C(m + 1);

  vi X,Y;
  A.pb(0);
  C[0]=A[0];
  A.erase(A.begin());
  C[1]=gen(X,Y,A);

  for (int i=1;i<=m;i++){
    C[i] = C[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...