답안 #852543

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
852543 2023-09-22T04:14:41 Z NeroZein Unscrambling a Messy Bug (IOI16_messy) C++17
100 / 100
2 ms 1112 KB
#include "messy.h"
#include "bits/stdc++.h"

using namespace std; 

void init(int l, int r, string& ask) {
  if (l == r) {
    return;
  }
  int m = (l + r) / 2; 
  for (int i = l; i <= m; ++i) {
    ask[i] = '1';
    add_element(ask);
    ask[i] = '0';
  }
  for (int i = l; i <= m; ++i) {
    ask[i] = '1';
  }
  init(m + 1, r, ask);
  for (int i = l; i <= m; ++i) {
    ask[i] = '0';
  }
  for (int i = m + 1; i <= r; ++i) {
    ask[i] = '1';
  }
  init(l, m, ask); 
  for (int i = m + 1; i <= r; ++i) {
    ask[i] = '0';
  }
}

vector<int> go(int l, int r, vector<int>& p, string& ask) {
  if (l == r) {
    return {p[0]};
  }
  vector<int> pl, pr;
  int m = (l + r) >> 1;
  for (int i = 0; i < (int) p.size(); ++i) {
    ask[p[i]] = '1';
    if (check_element(ask)) {
      pl.push_back(p[i]);
    } else {
      pr.push_back(p[i]); 
    }
    ask[p[i]] = '0';
  }
  for (int i = 0; i < (int) pl.size(); ++i) {
    ask[pl[i]] = '1';
  }
  vector<int> rret = go(m + 1, r, pr, ask);
  for (int i = 0; i < (int) pl.size(); ++i) {
    ask[pl[i]] = '0';
  }
  for (int i = 0; i < (int) pr.size(); ++i) {
    ask[pr[i]] = '1';
  }
  vector<int> ret = go(l, m, pl, ask);
  for (int i = 0; i < (int) pr.size(); ++i) {
    ask[pr[i]] = '0';
  }
  for (int i : rret) {
    ret.push_back(i);
  }
  return ret;
}

vector<int> restore_permutation(int n, int w, int r) {
  string e(n, '0'); 
  init(0, n - 1, e); 
  compile_set();
  vector<int> p(n);
  iota(p.begin(), p.end(), 0); 
  e = string(n, '0');
  vector<int> id = go(0, n - 1, p, e);
  vector<int> ans(n);
  for (int i = 0; i < (int) id.size(); ++i) {
    ans[id[i]] = i;
  }
  return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB n = 8
2 Correct 0 ms 348 KB n = 8
3 Correct 0 ms 348 KB n = 8
4 Correct 0 ms 348 KB n = 8
5 Correct 1 ms 348 KB n = 8
6 Correct 1 ms 348 KB n = 8
7 Correct 0 ms 348 KB n = 8
8 Correct 1 ms 348 KB n = 8
9 Correct 0 ms 348 KB n = 8
10 Correct 0 ms 348 KB n = 8
11 Correct 1 ms 348 KB n = 8
12 Correct 0 ms 436 KB n = 8
13 Correct 0 ms 348 KB n = 8
14 Correct 0 ms 348 KB n = 8
15 Correct 1 ms 344 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB n = 32
2 Correct 1 ms 344 KB n = 32
3 Correct 1 ms 344 KB n = 32
4 Correct 1 ms 348 KB n = 32
5 Correct 1 ms 348 KB n = 32
6 Correct 0 ms 348 KB n = 32
7 Correct 0 ms 348 KB n = 32
8 Correct 1 ms 348 KB n = 32
9 Correct 0 ms 348 KB n = 32
10 Correct 1 ms 348 KB n = 32
11 Correct 1 ms 344 KB n = 32
12 Correct 1 ms 348 KB n = 32
13 Correct 0 ms 348 KB n = 32
14 Correct 0 ms 348 KB n = 32
15 Correct 0 ms 600 KB n = 32
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB n = 32
2 Correct 0 ms 348 KB n = 32
3 Correct 0 ms 432 KB n = 32
4 Correct 0 ms 348 KB n = 32
5 Correct 0 ms 348 KB n = 32
6 Correct 1 ms 348 KB n = 32
7 Correct 1 ms 348 KB n = 32
8 Correct 1 ms 348 KB n = 32
9 Correct 0 ms 348 KB n = 32
10 Correct 0 ms 436 KB n = 32
11 Correct 1 ms 348 KB n = 32
12 Correct 1 ms 348 KB n = 32
13 Correct 1 ms 344 KB n = 32
14 Correct 1 ms 348 KB n = 32
15 Correct 1 ms 348 KB n = 32
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 604 KB n = 128
2 Correct 1 ms 620 KB n = 128
3 Correct 1 ms 1112 KB n = 128
4 Correct 1 ms 604 KB n = 128
5 Correct 1 ms 436 KB n = 128
6 Correct 1 ms 604 KB n = 128
7 Correct 1 ms 604 KB n = 128
8 Correct 2 ms 604 KB n = 128
9 Correct 1 ms 600 KB n = 128
10 Correct 1 ms 604 KB n = 128
11 Correct 1 ms 624 KB n = 128
12 Correct 2 ms 604 KB n = 128
13 Correct 1 ms 600 KB n = 128
14 Correct 1 ms 628 KB n = 128
15 Correct 1 ms 604 KB n = 128
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 600 KB n = 128
2 Correct 1 ms 600 KB n = 128
3 Correct 2 ms 600 KB n = 128
4 Correct 1 ms 604 KB n = 128
5 Correct 2 ms 604 KB n = 128
6 Correct 1 ms 604 KB n = 128
7 Correct 1 ms 604 KB n = 128
8 Correct 1 ms 436 KB n = 128
9 Correct 1 ms 604 KB n = 128
10 Correct 1 ms 604 KB n = 128
11 Correct 1 ms 604 KB n = 128
12 Correct 1 ms 604 KB n = 128
13 Correct 1 ms 604 KB n = 128
14 Correct 1 ms 604 KB n = 128
15 Correct 1 ms 604 KB n = 128