Submission #1359423

#TimeUsernameProblemLanguageResultExecution timeMemory
1359423LudisseyUnscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
1 ms580 KiB
#include <bits/stdc++.h>
#include "messy.h"
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()

using namespace std;

std::vector<int> restore_permutation(int n, int w, int r) {
    string s(n,'0');
    int LOG=log2(n);
    vector<int> used(n);
    int csm=0;
    for (int j = 0; j <= LOG; j++)
    {
        vector<int> new_used(n,false);
        for (int i = 0; i < n; i++)
        {
            if(s[i]=='0'&&i&(1<<(j-used[i]))) {
                s[i]='1';
                add_element(s);
                csm++;
                if(!used[i]) new_used[i]=true;
                s[i]='0';
            }
        }
        for (int i = 0; i < n; i++)
        {
            if(new_used[i]&&!used[i]) {
                s[i]='1';
                used[i]=true;
                new_used[i]=false;
            }else{
                s[i]='0';
            }
        }
    }
    cerr << csm << "\n";
    csm=0;
    for (int i = 0; i < n; i++)
    {
        s[i]='0';
        used[i]=false;
    }
    compile_set();
    vector<int> p(n,0);
    for (int j = 0; j <= LOG; j++)
    {
        vector<int> new_used(n,false);
        for (int i = 0; i < n; i++)
        {
            if(s[i]=='1'){
                continue;
            }
            if(j==LOG&&used[i]==false) continue;
            s[i]='1';
            csm++;
            if(check_element(s)){
                p[i]+=(1<<(j-used[i]));
                if(!used[i]) new_used[i]=true;
            }
            s[i]='0';
        }
        for (int i = 0; i < n; i++)
        {
            if(new_used[i]){
                used[i]=true;
                new_used[i]=false;
                s[i]='1';
            }else{
                s[i]='0';
            }
        }
    }
    cerr << csm << "\n";
    return p;
}
#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...