Submission #261122

# Submission time Handle Problem Language Result Execution time Memory
261122 2020-08-11T12:10:05 Z Nightlight Mechanical Doll (IOI18_doll) C++14
12 / 100
63 ms 9036 KB
#include "doll.h"
#include <bits/stdc++.h>
#define LOG2(n) (31 - __builtin_clz(n))
#define pii pair<int, int>
using namespace std;

int N, M;
int A[200005];
int tmp[200005];
int order[200005];
int to[200005];
int id[200005];
int X[200005], Y[200005];
int tot;
int cnt = 2;

void gen_order(int l, int r) {
  if(l == r) return;
  int mid = ((l + r) >> 1) + 1;
  for(int i = l; i <= r; i += 2) {
    tmp[l + (i - l) / 2] = order[i];
    tmp[mid + (i - l) / 2] = order[i + 1];
  }
  for(int i = l; i <= r; i++) order[i] = tmp[i];
  gen_order(l, mid - 1), gen_order(mid, r);
}

int DFS(int l, int r) {
  int now;
  if(l + 1 == r) {
    if(to[l] == to[r]) return to[l];
    if(l == 1 && r == tot) now = 1;
    else now = cnt++;
    X[now] = to[l], Y[now] = to[r];
//    cout << -now << " -> " << X[now] << " " << Y[now] << "\n";
    return -now;
  }
  int mid = (l + r) >> 1;
  int le = DFS(l, mid), ri = DFS(mid + 1, r);
  if(le == ri) return le;
  if(l == 1 && r == tot) now = 1;
  else now = cnt++;
  X[now] = le, Y[now] = ri;
//  cout << -now << " -> " << X[now] << " " << Y[now] << "\n";
  return -now;
}

void solve() {
  tot = LOG2(N);
  if(N % (1 << tot) != 0) tot++;
//  cout << "tot -> " << tot << "\n";
  tot = (1 << tot);
  for(int i = 1; i <= tot; i++) {
    order[i] = i;
  }
  gen_order(1, tot);
//  for(int i = 1; i <= tot; i++) cout << order[i] << " "; cout << "\n";
  memset(to, -1, sizeof(to));
  memset(tmp, -1, sizeof(tmp));
  for(int i = tot; i > tot - N; i--) tmp[order[i]] = 1;
  int p = 1;
  for(int i = 1; i <= N; i++) {
    while(tmp[p] == -1) p++;
    tmp[p] = A[i];
//    cout << p << " " << A[i] << "\n";
    p++;
  }
  assert(p == tot + 1);
  for(int i = 1; i <= tot; i++) {
    to[order[i]] = tmp[i];
    assert(to[i] <= M);
  }
  DFS(1, tot);
}

void create_circuit(int m, vector<int> a) {
  a.emplace_back(0);
  M = m, N = a.size();
  for(int i = 1; i <= N; i++) A[i] = a[i - 1];
  vector<int> c(M + 1);
  for(int i = 0; i <= M; i++) c[i] = -1;
  solve();
  vector<int> x(cnt - 1), y(cnt - 1);
  for(int i = 1; i < cnt; i++) {
    x[i - 1] = X[i];
    assert(x[i - 1] <= m);
    y[i - 1] = Y[i];
    assert(y[i - 1] <= m);
  }
//  system("pause");
  answer(c, x, y);
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 1920 KB Output is correct
2 Correct 42 ms 6468 KB Output is correct
3 Correct 38 ms 6740 KB Output is correct
4 Correct 2 ms 1868 KB Output is correct
5 Correct 17 ms 3020 KB Output is correct
6 Correct 63 ms 9036 KB Output is correct
7 Correct 2 ms 1868 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 1920 KB Output is correct
2 Correct 42 ms 6468 KB Output is correct
3 Correct 38 ms 6740 KB Output is correct
4 Correct 2 ms 1868 KB Output is correct
5 Correct 17 ms 3020 KB Output is correct
6 Correct 63 ms 9036 KB Output is correct
7 Correct 2 ms 1868 KB Output is correct
8 Runtime error 34 ms 8792 KB Execution killed with signal 6
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 1920 KB Output is correct
2 Correct 42 ms 6468 KB Output is correct
3 Correct 38 ms 6740 KB Output is correct
4 Correct 2 ms 1868 KB Output is correct
5 Correct 17 ms 3020 KB Output is correct
6 Correct 63 ms 9036 KB Output is correct
7 Correct 2 ms 1868 KB Output is correct
8 Runtime error 34 ms 8792 KB Execution killed with signal 6
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1868 KB Output is correct
2 Correct 3 ms 1868 KB Output is correct
3 Correct 2 ms 1868 KB Output is correct
4 Correct 2 ms 1868 KB Output is correct
5 Correct 2 ms 1868 KB Output is correct
6 Correct 2 ms 1868 KB Output is correct
7 Correct 2 ms 1868 KB Output is correct
8 Correct 2 ms 1868 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 1868 KB Output is correct
2 Runtime error 32 ms 8236 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 1868 KB Output is correct
2 Runtime error 32 ms 8236 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -