Submission #1121995

#TimeUsernameProblemLanguageResultExecution timeMemory
1121995MamedovUnscrambling a Messy Bug (IOI16_messy)C++17
100 / 100
2 ms760 KiB
#include <bits/stdc++.h>
#include "messy.h"

using namespace std;

void Adds(int n, int l, int r) {
  if (l < r) {
    int mid = (l + r) >> 1;
    string s(n, '1');
    for (int i = l; i <= r; ++i) {
      s[i] = '0';
    }
    for (int i = l; i <= mid; ++i) {
      s[i] = '1';
      add_element(s);
      s[i] = '0';
    }
    Adds(n, l, mid);
    Adds(n, mid + 1, r);
  }
}

void Checks(int n, int l, int r, vector<int> &p) {
  if (l < r) {
    int mid = (l + r) >> 1;
    string s(n, '1');
    for (int i = l; i <= r; ++i) {
      s[p[i]] = '0';
    }
    int i = l, j = r;
    while (i <= mid) {
      s[p[i]] = '1';
      if (check_element(s)) {
        s[p[i]] = '0';
        ++i;
      } else {
        s[p[i]] = '0';
        swap(p[i], p[j]);
        --j;
      }
    }
    Checks(n, l, mid, p);
    Checks(n, mid + 1, r, p);
  }
}
vector<int> restore_permutation(int n, int w, int r) {
  Adds(n, 0, n - 1);
  compile_set();
  vector<int>p(n);
  for (int i = 0; i < n; ++i) {
    p[i] = i;
  }
  Checks(n, 0, n - 1, p);
  /// find inv. permutation
  vector<int>q(n);
  for (int i = 0; i < n; ++i) {
    q[p[i]] = i;
  }
  return q;
}
#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...