Submission #1205885

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

#include "messy.h"
#include <bits/stdc++.h>
using namespace std;

void add(int n, string pre, string suf){
    if(n==1){
        return;
    }
    string s="",tmp="";
    for(int i=0;i<n;i++){
        s+='0';
    }
    for(int i=0;i<n/2;i++){
        s[i]='1';
        add_element(pre+s+suf);
        s[i]='0';
    }
    for(int i=0;i<n/2;i++){
        tmp+='1';
    }
    add(n/2,pre+tmp,suf);
    add(n/2,pre,tmp+suf);
}

vector<int> solve(int n, string cur, int l, int r, vector<int> pos){
    if(r==l){
        return {pos[0]};
    }
    vector<int> l_pos,r_pos;
    string l_cur=cur,r_cur=cur;
    for(int i=0;i<n;i++){
        cur[pos[i]]='1';
        if(check_element(cur)){
            l_cur[pos[i]]='1';
            l_pos.push_back(pos[i]);
        }else{
            r_cur[pos[i]]='1';
            r_pos.push_back(pos[i]);
        }
        cur[pos[i]]='0';
    }
    vector<int> ans1=solve(n/2,r_cur,l,r-n/2,l_pos),ans2=solve(n/2,l_cur,l+n/2,r,r_pos);
    for(auto u:ans2){
        ans1.push_back(u);
    }
    return ans1;
}

std::vector<int> restore_permutation(int n, int w, int r) {
    int cnt;
    string s="",tmp;
    vector<int> ans,real(n);
    for(int i=0;i<n;i++){
        s+='0';
        ans.push_back(i);
    }
    add(n,"","");
    compile_set();
    ans=solve(n,s,0,n-1,ans);
    for(int i=0;i<n;i++){
        real[ans[i]]=i;
    }
    return real;
}

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...