Submission #1059406

#TimeUsernameProblemLanguageResultExecution timeMemory
1059406TAhmed33Unscrambling a Messy Bug (IOI16_messy)C++98
100 / 100
1 ms604 KiB
#include <bits/stdc++.h>
using namespace std;
#include "messy.h"
//#include "grader.cpp"
#define mid ((l + r) >> 1)
mt19937 rng (chrono::steady_clock::now().time_since_epoch().count());
int random (int l, int r) {
    return uniform_int_distribution <int> (l, r) (rng);
}
int n;
void recurse (int l, int r) {
    if (l == r) {
        return;
    }
    string t;
    for (int i = 0; i < n; i++) {
        t += '1';
    }
    for (int i = l; i <= r; i++) {
        t[i] = '0';
    }
    for (int i = l; i <= mid; i++) {
        t[i] = '1';
        add_element(t);
        t[i] = '0';
    }
    recurse(l, mid); recurse(mid + 1, r);
}
vector <int> P;
void construct (int l, int r, vector <int> x) {
    if (l == r) {
        P[x[0]] = l;
        return;
    }
    string t;
    for (int i = 0; i < n; i++) {
        t.push_back('1');
    }
    for (auto j : x) {
        t[j] = '0';
    }
    vector <int> g, h;
    for (auto j : x) {
        t[j] = '1';
        if (check_element(t)) {
            g.push_back(j);
        } else {
            h.push_back(j);
        }
        t[j] = '0';
    }
    construct(l, mid, g); construct(mid + 1, r, h);
}
vector <int> restore_permutation (int N, int w, int r) {
    n = N;
    P.resize(n);
    recurse(0, n - 1);
    compile_set();
    vector <int> z;
    for (int i = 0; i < n; i++) {
        z.push_back(i);
    }
    construct(0, n - 1, z);
    return P;
}
#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...