Submission #541137

#TimeUsernameProblemLanguageResultExecution timeMemory
541137MilosMilutinovicMechanical Doll (IOI18_doll)C++14
6 / 100
79 ms12472 KiB
#include "doll.h"
#include <bits/stdc++.h>

using namespace std;

void create_circuit(int m, vector<int> a) {
  int n = a.size();       
  vector<vector<int>> nxt(m + 1);
  for (int i = 0; i + 1 < n; i++) {
    nxt[a[i]].push_back(a[i + 1]);
  }
  nxt[0].push_back(a[0]);
  nxt[a.back()].push_back(0);
  vector<int> ans(m + 1);
  vector<int> x;
  vector<int> y;
  int idx = 0;
  for (int i = 0; i <= m; i++) {
    if (nxt[i].empty()) {
      ans[i] = 0;
      continue;
    }
    if (nxt[i].size() == 1) {
      ans[i] = nxt[i][0];
      continue;
    }
    function<void(int, int, int)> Rec = [&](int node, int l, int r) {
      if (l + 1 == r) {
        x.push_back(nxt[i][l]);
        y.push_back(nxt[i][r]);
        return;
      }
      if (l + 2 == r) {
        --idx;
        x.push_back(idx);
        --idx;
        y.push_back(idx); 
        x.push_back(node);
        y.push_back(nxt[i][l + 1]);
        x.push_back(nxt[i][l]);
        y.push_back(nxt[i][r]);
        return;
      }
      int mid = l + r >> 1;
      --idx;
      x.push_back(idx);
      --idx;
      y.push_back(idx);
      Rec(idx + 1, l, mid);
      Rec(idx, mid + 1, r);
    };
    --idx;
    ans[i] = idx;
    Rec(idx, 0, nxt[i].size() - 1);
  } 
  answer(ans, x, y);
}

Compilation message (stderr)

doll.cpp: In lambda function:
doll.cpp:44:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   44 |       int mid = l + r >> 1;
      |                 ~~^~~
#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...