Submission #574858

#TimeUsernameProblemLanguageResultExecution timeMemory
5748582fat2codeUnscrambling a Messy Bug (IOI16_messy)C++17
100 / 100
2 ms468 KiB
#include <bits/stdc++.h>
#include "messy.h"
#define fr first
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#define sc second
#define all(s) s.begin(), s.end()
#define rc(s) return cout << s, 0
using namespace std;

int N, mp[200];

void recursiv(int l, int r){
    if(l == r) return;
    string s = "";
    for(int i=1;i<=N;i++) s += '0';
    for(int i=0;i<l;i++) s[i] = '1';
    for(int i=r+1;i<N;i++) s[i] = '1';
    int mid = l + (r - l) / 2;
    for(int i=l;i<=mid;i++){
        s[i] = '1';
        add_element(s);
        s[i] = '0';
    }
    recursiv(l, mid);
    recursiv(mid + 1, r);
}

void davai(int l, int r, vector<int>tz){
    if(l == r){
        mp[l] = tz[0];
        return;
    }
    else{
        int mid = l + (r - l) / 2;
        string s;
        for(int i=0;i<N;i++) s += '1';
        for(auto it : tz) s[it] = '0';
        vector<int>le, ri;
        for(auto it : tz){
            s[it] = '1';
            if(check_element(s)){
                le.push_back(it);
            }
            else{
                ri.push_back(it);
            }
            s[it] = '0';
        }
        davai(l, mid, le);
        davai(mid + 1, r, ri);
    }
}

vector<int> restore_permutation(int n, int w, int r) {
    N = n;
    recursiv(0, n - 1);
    compile_set();
    vector<int>tz;
    for(int i=0;i<N;i++) tz.push_back(i);
    davai(0, n - 1, tz);
    vector<int>ans;
    for(int i=0;i<N;i++){
        ans.push_back(mp[i]);
    }
    vector<int>lmao(N, 0);
    for(int i=0;i<(int)ans.size();i++){
        lmao[ans[i]] = i;
    }
    return lmao;
}
#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...