Submission #384915

#TimeUsernameProblemLanguageResultExecution timeMemory
384915arman_ferdousMechanical Doll (IOI18_doll)C++17
16 / 100
168 ms12828 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;

#define sz(v) (int)v.size()

const int M = 1e5+10; // triggers

vector<int> g[M];

void create_circuit(int m, vector<int> a) {
  a.push_back(0); // to loop back
  int n = a.size(); 
  for(int i = 0; i < n - 1; i++) {
    g[a[i]].push_back(a[i + 1]);
  }
  vector<int> C, X, Y; C.push_back(a[0]); // starting connection
  for(int i = 1; i <= m; i++) {
    assert(sz(g[i]) <= 4);
    if(g[i].empty()) {
      C.push_back(0);
      continue;
    }
    int newswitch = - sz(X) - 1;
    // C.push_back(newswitch);
    if(sz(g[i]) == 1) {
      C.push_back(g[i][0]);
    }
    else if(sz(g[i]) == 2) {
      C.push_back(newswitch);
      X.push_back(g[i][0]);
      Y.push_back(g[i][1]);
    }
    else if(sz(g[i]) == 3) {
      C.push_back(newswitch);
      int le = newswitch - 1, ri = newswitch - 2;

      X.push_back(le); Y.push_back(ri);
      X.push_back(g[i][0]); Y.push_back(newswitch);
      X.push_back(g[i][1]); Y.push_back(g[i][2]);
    }
    else {
      C.push_back(newswitch);
      int le = newswitch - 1, ri = newswitch - 2;

      X.push_back(le); Y.push_back(ri);
      X.push_back(g[i][0]); Y.push_back(g[i][2]);
      X.push_back(g[i][1]); Y.push_back(g[i][3]);
    }
  }
  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...