답안 #829939

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
829939 2023-08-18T16:02:39 Z radaiosm7 자동 인형 (IOI18_doll) C++17
6 / 100
54 ms 13492 KB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
int i, n, m, s, g, j, kk, ch;
vector<int> C;
vector<int> X;
vector<int> Y;
vector<int> adj[100005];
bool visited[100005];
bool finished[200005];
vector<vector<int> > groups;
vector<int> tmp;
bool vis;
vector<int> sw;
vector<int> st;
vector<pair<int, int> > pos;

void new_switch() {
  sw.push_back(--s);
  st.push_back(0);
  X.push_back(sw.front());
  Y.push_back(sw.front());
}

void dfs(int x) {
  if (st[-x-1] == 0) {
    st[-x-1] ^= 1;
    if (X[-x-1] == sw.front()) pos.push_back(make_pair(-x-1, 0));
    else dfs(X[-x-1]);
  }

  else {
    st[-x-1] ^= 1;
    if (Y[-x-1] == sw.front()) pos.push_back(make_pair(-x-1, 1));
    else dfs(Y[-x-1]);
  }
}

void create_switch(int i) {
  int num = (int)adj[i].size();
  if (num == 0) C[i] = i;

  else if (num == 1) C[i] = adj[i][0];

  else {
    sw.clear();
    new_switch();
    C[i] = s;
    kk = 2;

    while (kk < num) {
      new_switch();
      ++kk;
      if (j&1) X[-sw[j>>1]-1] = s;
      else Y[-sw[(j-1)>>1]-1] = s;
    }

    pos.clear();
    for (int j=0; j < kk; ++j) dfs(sw.front());
    --kk;

    for (j=num-1; j >= 0; --j) {
      if (pos[kk].second == 0) X[pos[kk].first] = adj[i][j];
      else Y[pos[kk].first] = adj[i][j];
      --kk;
    }
  }
}

void create_circuit(int M, vector<int> A) {
  m = M;
  n = (int)A.size();
  fill(finished, finished+n+1, false);
  C.resize(m+1);
  X.clear();
  Y.clear();
  st.clear();
  s = 0;
  A.push_back(0);
  for (i=0; i < n; ++i) adj[A[i]].push_back(A[i+1]);
  C[0] = A[0];
  for (i=1; i <= m; ++i) create_switch(i);
  answer(C, X, Y);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2644 KB Output is correct
2 Correct 23 ms 6416 KB Output is correct
3 Correct 16 ms 6124 KB Output is correct
4 Correct 1 ms 2644 KB Output is correct
5 Correct 9 ms 4020 KB Output is correct
6 Correct 25 ms 8132 KB Output is correct
7 Correct 1 ms 2644 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2644 KB Output is correct
2 Correct 23 ms 6416 KB Output is correct
3 Correct 16 ms 6124 KB Output is correct
4 Correct 1 ms 2644 KB Output is correct
5 Correct 9 ms 4020 KB Output is correct
6 Correct 25 ms 8132 KB Output is correct
7 Correct 1 ms 2644 KB Output is correct
8 Correct 42 ms 9304 KB Output is correct
9 Correct 38 ms 9668 KB Output is correct
10 Correct 54 ms 12720 KB Output is correct
11 Correct 1 ms 2548 KB Output is correct
12 Correct 1 ms 2644 KB Output is correct
13 Correct 1 ms 2644 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2644 KB Output is correct
2 Correct 23 ms 6416 KB Output is correct
3 Correct 16 ms 6124 KB Output is correct
4 Correct 1 ms 2644 KB Output is correct
5 Correct 9 ms 4020 KB Output is correct
6 Correct 25 ms 8132 KB Output is correct
7 Correct 1 ms 2644 KB Output is correct
8 Correct 42 ms 9304 KB Output is correct
9 Correct 38 ms 9668 KB Output is correct
10 Correct 54 ms 12720 KB Output is correct
11 Correct 1 ms 2548 KB Output is correct
12 Correct 1 ms 2644 KB Output is correct
13 Correct 1 ms 2644 KB Output is correct
14 Runtime error 43 ms 13492 KB Execution killed with signal 6
15 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 5140 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 5204 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 5204 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -