Submission #1240673

#TimeUsernameProblemLanguageResultExecution timeMemory
1240673nikdMechanical Doll (IOI18_doll)C++20
6 / 100
44 ms11192 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;

void create_circuit(int M, std::vector<int> A) {
  vector<vector<int>> next(M+1);
  next[0].push_back(A[0]);
  int n = A.size();
  for(int i = 0; i<n-1; i++){
    next[A[i]].push_back(A[i+1]);
  }
  next[A[n-1]].push_back(0);
  int s = 0;
  vector<int> c(M+1);
  vector<int> x, y;
  for(int i = 0; i<=M; i++){
    if(next[i].empty()) c[i] = 0;
    else if(next[i].size() == 1) c[i] = next[i][0];
    else{
      c[i] = -(++s);
      int idx = 0;
      auto build = [&](auto&& build, int pow2, int md)->void{
        int md1 = md;
        int md2 = md+pow2;  
        pow2 <<= 1;
        if(next[i].size()-md1 <= pow2){
          x.push_back(next[i][md1]);
          y.push_back(next[i][md2]);
        }
        else{
          if(next[i].size()-md2 <= pow2){
            x.push_back(-(++s));
            y.push_back(next[i][md2]);
            build(build, pow2, md1);
          }
          else{
            x.push_back(-(++s));
            y.push_back(-(++s));
            build(build, pow2, md1);
            build(build, pow2, md2);
          }
        }
      };
      build(build, 1, 0);
    }
  }
  answer(c, 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...