Submission #610816

#TimeUsernameProblemLanguageResultExecution timeMemory
610816APROHACKUnscrambling a Messy Bug (IOI16_messy)C++14
100 / 100
2 ms556 KiB
#include <vector>
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define ff first
#define ss second
using namespace std;
#include "messy.h"
ll N;
vector<int>permutation;
void llenar(int l, int r){
    ll mid = (l+r)/2;
    string ans = "";
    for(int i = 0 ; i < N ; i++){
        ans+="1";
    }
    for(int i = l ; i <= r ; i++){
        ans[i] = '0';
    }
    for(int i = l ; i <= mid ; i++){
        ans[i]='1';
        add_element(ans);
        ans[i]='0';
    }
}
void recArbol(int l, int r){
    if(l==r)return ;
    llenar(l, r);
    recArbol(l, (l+r)/2);
    recArbol(((l+r)/2)+1, r);
}

struct messy
{
    int dd, ht, mid;
    vector<int>values;
    messy *L, *R;
    messy(int l, int r){
        ////cout<< l << " " << r << endl;
        dd = l;
        ht = r;
        mid = (dd+ht)/2;
        if(dd!=ht){
            L = new messy(l, mid);
            R = new messy(mid+1, r);
        }
        
    }
    void addValues(int cual){
        values.pb(cual);
        //cout<<dd << " - " << ht << " added: " << cual << endl;
    }
    void ask(){
        if(dd==ht){
            permutation[values.back()] = dd;
            return;
        }
        //cout<<"doing "<<dd<<" " << ht << endl;
        string p = "";
        for(int i = 0 ; i < N; i++){
            p+="1";
        }
        for(int i = 0 ; i < values.size() ; i ++){
            p[values[i]]='0';
        }
        for(int i = 0 ; i < values.size() ; i++){
            p[values[i]]='1';
            //cout<<"to test "<<p<<endl;
            if(check_element(p)){
                L->addValues(values[i]);
            }else{
                R->addValues(values[i]);
            }
            p[values[i]]='0';
        }
        L->ask();
        R->ask();
        
    }
};

messy *run;
std::vector<int> restore_permutation(int n, int w, int r) {
    string s= "", k = "";
    N = n;
    recArbol(0, n-1);
    compile_set();
    permutation.resize(n);
    run = new messy(0, N-1);
    for(int i = 0 ; i < n ; i++)run->addValues(i);
    run->ask();
    return permutation;
}

Compilation message (stderr)

messy.cpp: In member function 'void messy::ask()':
messy.cpp:63:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |         for(int i = 0 ; i < values.size() ; i ++){
      |                         ~~^~~~~~~~~~~~~~~
messy.cpp:66:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |         for(int i = 0 ; i < values.size() ; i++){
      |                         ~~^~~~~~~~~~~~~~~
#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...