| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1300980 | PakinDioxide | Unscrambling a Messy Bug (IOI16_messy) | C++17 | 0 ms | 0 KiB |
#include "messy.h"
#include <bits/stdc++.h>
using namespace std;
static int ans[128], n;
void dnc1(int l, int r) {
if (r - l == 1) return;
int m = l + (r-l)/2;
char s[n+1]; s[n] = 0;
for (int i = 0; i < l; i++) s[i] = '1';
for (int i = l; i < r; i++) s[i] = '0';
for (int i = r; i < n; i++) s[i] = '1';
for (int i = l; i < m; i++) {
s[i] = '1';
add_element(s);
s[i] = '0';
}
dnc1(l, m), dnc1(m, r);
}
void dnc2(int l, int r, vector <int> A) {
if (r - l == 1) { ans[l] = A[0]; return; }
int m = l + (r-l)/2;
char s[n+1]; s[n] = 0;
for (int i = 0; i < n; i++) s[i] = '1';
for (auto &e : A) s[e] = '0';
vector <int> L, R;
for (auto &e : A) {
s[e] = '1';
if (check_element(s)) L.emplace_back(e);
else R.emplace_back(e);
s[e] = '0';
}
dnc2(l, m, L), dnc2(m, r, R);
}
void restore_permutation(int N, int w, int r, int* result) {
n = N;
dnc1(0, n);
compile_set();
vector <int> X; for (int i = 0; i < n; i++) X.emplace_back(i);
dnc2(0, n, X);
for (int i = 0; i < n; i++) result[ans[i]] = i;
}
/*
check which N/2 bits
*/
