Submission #1237224

#TimeUsernameProblemLanguageResultExecution timeMemory
1237224TimoshMechanical Doll (IOI18_doll)C++20
2 / 100
22 ms7752 KiB
#include "bits/stdc++.h"
#include "doll.h"

using namespace std;

void create_circuit(int M, vector<int> A)
{
  int N = A.size();
  vector<int> C(M + 1);
  C[0] = A[0];
  vector<int> X, Y;
  vector<vector<int>> g(M + 1);
  for (int i = 0; i < N - 1; i++)
    g[A[i]].push_back(A[i + 1]);
  g[A.back()].push_back(0);
  for (int i = 0; i <= M; i++)
  {
    int sz = g[i].size();
    if (sz == 0)
      continue;
    if (sz == 1)
    {
      C[i] = g[i][0];
      continue;
    }
    int x = 0;
    while ((1ll << x) < sz)
      x++;
    int ind = X.size() + 1;
    ind *= -1;
    while (sz < (1ll << x))
      sz++, g[i].push_back(ind);
    C[i] = ind;
    for (int i = 0; i < (1ll << x) / 2 - 1; i++)
    {
      X.push_back(ind - (2 * i + 1));
      Y.push_back(ind - (2 * i + 2));
    }
    int j = 0;
    for (int i = (1ll << x) / 2 - 1; j < sz; i++)
    {
      X.push_back(g[i][j++]);
      Y.push_back(g[i][j++]);
    }
  }
  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...