제출 #1351219

#제출 시각아이디문제언어결과실행 시간메모리
1351219SpyrosAliv자동 인형 (IOI18_doll)C++20
16 / 100
35 ms11804 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;

void dbg(vector<int> x) {
  cout << "DBG: ";
  for (auto xx: x) cout << xx << " ";
  cout << "\n";
}

void create_circuit(int M, std::vector<int> A) {
  int m = M;
  vector<int> a = A;
  int n = a.size();
  vector<int> conn(m+1);
  vector<vector<int>> aft(m+1);
  for (int i = 0; i < n-1; i++) {
    aft[a[i]].push_back(a[i+1]);
  }
  aft[a.back()].push_back(0);
  aft[0].push_back(a[0]);
  vector<int> x, y;
  for (int i = 0; i <= m; i++) {
    if (aft[i].empty()) {
      conn[i] = i;
      continue;
    }
    else if (aft[i].size() == 1) {
      conn[i] = aft[i][0];
      continue;
    }
    else if (aft[i].size() == 2) {
      x.push_back(aft[i][0]);
      y.push_back(aft[i][1]);
      conn[i] = -x.size();
    }
    else if (aft[i].size() == 3) {
      int f = x.size() + 1;
      conn[i] = -f;
      x.push_back(-f-1);
      y.push_back(-f-2);
      x.push_back(aft[i][0]);
      y.push_back(-f);
      x.push_back(aft[i][1]);
      y.push_back(aft[i][2]);
    }
    else if (aft[i].size() == 4) {
      int f = x.size() + 1;
      conn[i] = -f;
      x.push_back(-f-1);
      y.push_back(-f-2);
      x.push_back(aft[i][0]);
      y.push_back(aft[i][2]);
      x.push_back(aft[i][1]);
      y.push_back(aft[i][3]);
    } 
  }
  answer(conn, 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...