제출 #1221978

#제출 시각아이디문제언어결과실행 시간메모리
1221978madamadam3자동 인형 (IOI18_doll)C++20
6 / 100
39 ms8260 KiB
#include "doll.h"
#include <bits/stdc++.h>

using namespace std;

#define FOR(i, a, b) for (int i = a; i < b; i++)
#define all(x) (x).begin(), (x).end()
#define sz(x) (x).size()

typedef long long ll;
using vi = vector<int>;

void simulate(int m, vi &C, vi &X, vi &Y) {
  int cur = 0, done = 0;
  vi state(X.size(), 0);

  while (true) {
    cout << cur << " ";
    if (cur == 0 && done > 0) break;

    if (cur >= 0) {
      cur = C[cur];
    } else {
      state[(-cur) - 1] = 1 - state[(-cur) - 1];

      if (state[(-cur) - 1] == 1) {
        cur = X[(-cur) - 1];
      } else {
        cur = Y[(-cur) - 1];
      }
    }

    done++;
  }

  cout << "\n";
}

void create_circuit(int m, vi A) {
  int n = sz(A);
  vi C(m + 1, 0);
  vi X(n), Y(n);

  C[0] = A[0];
  vi cnt(m+1, 0); FOR(i, 0, n) cnt[A[i]]++;
  
  int cs = -1;
  FOR(i, 0, n) {
    int cv = (-cs) -1;
    if (C[A[i]] == 0) {
      X[cv] = C[A[i]] = cs;
      Y[cv] = i == n-1 ? 0 : A[i+1];
    } else {
      int prev = (-C[A[i]]) - 1;
      X[prev] = Y[prev];
      Y[prev] = X[cv] = cs;
      Y[cv] = i == n - 1 ? 0 : A[i+1];
    }
    cs--;
  }

  // simulate(m, 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...