이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
// william-ac
#include "squares.h"
#include <vector>
std::vector<int> labels, visited, euler_path;
int reverse_map[1024];
void dfs(int x) {
  while (visited[x] < 2) {
    dfs((x >> 1) | (visited[x]++ << 8));
  }
  euler_path.push_back(x);
}
void generate_map() {
  visited.assign(512, 0);
  euler_path.clear();
  dfs(0);
  labels.clear();
  labels.assign(8, 0);
  for (int i = 0; i < (int)euler_path.size() - 1; i++) {
    labels.push_back(euler_path[i] & 1);
    reverse_map[(euler_path[i] << 1) | (euler_path[i + 1] & 1)] = i;
  }
}
std::vector<int> paint(int n) {
  if (euler_path.empty()) {
    generate_map();
  }
  std::vector<int> painting(n + 1);
  for (int i = 0; i < n; i++) {
    painting[i] = labels[i];
  }
  painting[n] = 10;
  return painting;
}
int find_location(int n, std::vector<int> c) {
  if (euler_path.empty()) {
    generate_map();
  }
  int val = 0;
  for (int i = 0; i < (int)c.size(); i++) {
    if (c[i] == -1) return n - i;
    val = (val << 1) | c[i];
  }
  return reverse_map[val];
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |