Submission #1233334

#TimeUsernameProblemLanguageResultExecution timeMemory
1233334dssfsuper2Unscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
1 ms584 KiB
#include <vector>

#include "messy.h"
#include <bits/stdc++.h>
using namespace std;
int k = 0;
vector<int> perm;
void recurse(string s, int l, int r){
    if(l==r)return;
    for(int i = l;i<=(l+r)/2;i++){
        s[i]='1';
        //cout << s << '\n';
        k++;
        add_element(s);
        s[i]='0';
    }
    for(int i = l;i<=(l+r)/2;i++){
        s[i]='1';
    }
    recurse(s, (l+r)/2+1, r);
    for(int i = l;i<=(l+r)/2;i++){
        s[i]='0';
    }
    for(int i = (l+r)/2+1;i<=r;i++){
        s[i]='1';
    }
    recurse(s, l, (l+r)/2);
}
void recursefind(int l, int r, vector<int> known, string s){
    //cout << l << ' ' << r << ' ' << s << ' ';
    //for(auto thing:known)cout << thing << ' ' ;
    //cout << '\n';
    if(l==r){
        perm[l]=known.back();
        return;
    }
    vector<int> left, right;
    for(auto thing:known){
        s[thing]='1';
        bool t = check_element(s);
        s[thing]='0';
        if(t){
            left.push_back(thing);
        }
        else right.push_back(thing);
    }
    for(auto thing:right){
        s[thing]='1';
    }
    recursefind(l, (l+r)/2, left, s);
    for(auto thing:right)s[thing]='0';
    for(auto thing:left)s[thing]='1';
    recursefind((l+r)/2+1, r, right, s);
}
vector<int> restore_permutation(int n, int w, int r) {
    string s;
    perm.resize(n);
    for(int i = 0;i<n;i++){
        s.push_back('0');
    }
    recurse(s, 0, n-1);
    compile_set();
    s="";
    vector<int> known;
    for(int i = 0;i<n;i++){
        s.push_back('0');
        known.push_back(i);
    }
    recursefind(0, n-1, known, s);
    vector<int> rpe(n);
    for(int i = 0;i<n;i++){
        rpe[perm[i]]=i;
    }
    return rpe;
}

Compilation message (stderr)

messy.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
messy_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...