Submission #1154352

#TimeUsernameProblemLanguageResultExecution timeMemory
1154352AlgorithmWarriorUnscrambling a Messy Bug (IOI16_messy)C++20
49 / 100
1 ms580 KiB
#include <vector>
#include <cstdio>
#include <string>
#include <set>
#include <cstdlib>
#include <iostream>
#include "messy.h"

using namespace std;

vector<int> restore_permutation(int n, int w, int r) {
    vector<int>answer(n);
    string sir;
    int i,j;
    for(i=0;i<n;++i)
        sir.push_back('0');
    if(w<r){
    for(i=0;i<n;++i){
        sir[i]='1';
        add_element(sir);
    }
    compile_set();
    for(i=0;i<n;++i)
        sir[i]='0';
    for(i=0;i<n;++i){
        bool gasit=0;
        for(j=0;!gasit;++j)
            if(sir[j]=='0'){
                sir[j]='1';
                if(check_element(sir)){
                    gasit=1;
                    answer[j]=i;
                }
                else
                    sir[j]='0';
            }
    }
    }
    else{
        sir[n-1]='1';
        add_element(sir);
        sir[n-1]='0';
        for(i=0;i<n-2;++i){
            sir[i]='1';
            for(j=i+1;j<n;++j){
                sir[j]='1';
                add_element(sir);
                sir[j]='0';
            }
        }
        compile_set();
        for(i=0;i<n;++i)
            sir[i]='0';
        for(i=0;i<n-2;++i){
            vector<int>pos;
            for(j=0;j<n;++j)
                if(sir[j]=='0')
                    pos.push_back(j);
            int gasit=-1;
            for(j=0;j<(int)pos.size()-2 && gasit==-1;j+=2){
                sir[pos[j]]='1';
                sir[pos[j+1]]='1';
                if(check_element(sir)){
                    sir[pos[j+1]]='0';
                    sir[pos[pos.size()-1]]='1';
                    if(check_element(sir))
                        gasit=pos[j];
                    else
                        gasit=pos[j+1];
                    sir[pos[pos.size()-1]]='0';
                    sir[pos[j]]='0';
                }
                else{
                    sir[pos[j]]='0';
                    sir[pos[j+1]]='0';
                }
            }
            if(gasit==-1){
                if(j==(int)pos.size()-2){
                    sir[pos[0]]='1';
                    sir[pos[j]]='1';
                    if(check_element(sir))
                        gasit=pos[j];
                    else
                        gasit=pos[j+1];
                    sir[pos[0]]='0';
                    sir[pos[j]]='0';
                }
                else
                    gasit=pos[j];
            }
            answer[gasit]=i;
            sir[gasit]='1';
        }
        int pos1=-1,pos2=-1;
        for(i=0;i<n;++i)
            if(sir[i]=='0'){
                if(pos1==-1)
                    pos1=i;
                else
                    pos2=i;
            }
        for(i=0;i<n;++i)
            if(i==pos1)
                sir[i]='1';
            else
                sir[i]='0';
        if(check_element(sir)){
            answer[pos1]=n-1;
            answer[pos2]=n-2;
        }
        else{
            answer[pos1]=n-2;
            answer[pos2]=n-1;
        }
    }
    return answer;
}

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