Submission #172984

#TimeUsernameProblemLanguageResultExecution timeMemory
172984nobikMechanical Doll (IOI18_doll)C++14
6 / 100
119 ms11044 KiB
#include "doll.h"
#include <bits/stdc++.h>

using namespace std;

int BuildTree(const vector<int>& outs, vector<int>& x, vector<int>& y) {
  if (outs.size() == 1) {
    return outs[0];
  }

  vector<int> left, right;
  for (int i = 0; i < (int) outs.size(); ++i) {
    if (i % 2 == 0)
      left.push_back(outs[i]);
    else
      right.push_back(outs[i]);
  }

  int id_left = BuildTree(left, x, y);
  int id_right = BuildTree(right, x, y);
  x.push_back(id_left);
  y.push_back(id_right);
  return -(int)x.size();
}

void create_circuit(int M, std::vector<int> A) {
  int n = A.size();

  vector<vector<int>> outs(M + 1);
  outs[0].push_back(A[0]);


  std::vector<int> C(M + 1);
  vector<int> X, Y;
  for (int i = 0; i < n; ++i) {
    if (i + 1 < n)
      outs[A[i]].push_back(A[i + 1]);
  }

  outs[A[n - 1]].push_back(0);

  for (int i = 0; i < M + 1; ++i) {
    if (!outs[i].empty()) {
      while (outs[i].size() & ((int) outs[i].size() - 1)) outs[i].push_back(0);
      C[i] = BuildTree(outs[i], X, Y);
    }
  }

  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...