Submission #1362823

#TimeUsernameProblemLanguageResultExecution timeMemory
1362823osmiyumUnscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
1 ms580 KiB
#include <bits/stdc++.h>
#include "messy.h"
using namespace std;

vector<int> restore_permutation(int n, int w, int r) {
    (void)w;
    (void)r;

    vector<int> result(n, -1);

    function<void(int,int)> build = [&](int l, int rr) {
        if (rr - l == 1) return;
        int mid = (l + rr) / 2;

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

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

        build(l, mid);
        build(mid, rr);
    };

    function<void(int,int,const vector<int>&)> solve = [&](int l, int rr, const vector<int>& T) {
        if (rr - l == 1) {
            result[T[0]] = l;
            return;
        }

        int mid = (l + rr) / 2;
        vector<int> TL, TR;

        string q(n, '1');
        for (int pos : T) q[pos] = '0';

        for (int pos : T) {
            q[pos] = '1';
            if (check_element(q)) TL.push_back(pos);
            else TR.push_back(pos);
            q[pos] = '0';
        }

        solve(l, mid, TL);
        solve(mid, rr, TR);
    };

    build(0, n);
    compile_set();

    vector<int> all(n);
    iota(all.begin(), all.end(), 0);
    solve(0, n, all);

    return result;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...