제출 #1336238

#제출 시각아이디문제언어결과실행 시간메모리
1336238tolgaUnscrambling a Messy Bug (IOI16_messy)C++20
0 / 100
1 ms580 KiB
#include "messy.h"
#include <numeric>
#include <vector>
using namespace std;

const int maxn = 150;
int g_N, arr[maxn];

void dnc1(int l, int r) {
  if (l == r)
    return;

  int mid = (l + r) / 2;
  dnc1(l, mid);
  dnc1(mid + 1, r);

  string s(g_N, '1');
  for (int i = l; i <= mid; i++)
    s[i] = '0';

  for (int i = mid + 1; i <= r; i++) {
    s[i] = '0';
    add_element(s);
    s[i] = '1';
  }
}

void dnc2(int l, int r, vector<int> &a) {
  if (l == r) {
    arr[a[0]] = l;
    return;
  }

  vector<int> left, right;
  string s(g_N, '1');

  for (int i : a)
    s[i] = '0';

  for (int i : a) {
    s[i] = '1';
    if (check_element(s))
      right.push_back(i);
    else
      left.push_back(i);
    s[i] = '0';
  }

  int mid = (l + r) / 2;
  dnc2(l, mid, left);
  dnc2(mid + 1, r, right);
}

vector<int> restore_permutation(int N, int w, int r) {
  g_N = N;
  fill_n(arr, maxn, 0);

  dnc1(0, N - 1);
  compile_set();

  vector<int> a(N);
  iota(a.begin(), a.end(), 0);

  dnc2(0, N - 1, a);

  vector<int> ans(N);
  for (int i = 0; i < N; i++)
    ans[i] = arr[i];

  return ans;
}
#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...