답안 #610816

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
610816 2022-07-28T14:58:32 Z APROHACK Unscrambling a Messy Bug (IOI16_messy) C++14
100 / 100
2 ms 556 KB
#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

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++){
      |                         ~~^~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB n = 8
2 Correct 1 ms 212 KB n = 8
3 Correct 1 ms 212 KB n = 8
4 Correct 0 ms 212 KB n = 8
5 Correct 0 ms 212 KB n = 8
6 Correct 0 ms 212 KB n = 8
7 Correct 1 ms 296 KB n = 8
8 Correct 0 ms 212 KB n = 8
9 Correct 0 ms 212 KB n = 8
10 Correct 1 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 0 ms 212 KB n = 8
13 Correct 0 ms 300 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 300 KB n = 32
2 Correct 1 ms 212 KB n = 32
3 Correct 1 ms 300 KB n = 32
4 Correct 1 ms 212 KB n = 32
5 Correct 1 ms 212 KB n = 32
6 Correct 1 ms 212 KB n = 32
7 Correct 1 ms 300 KB n = 32
8 Correct 1 ms 212 KB n = 32
9 Correct 0 ms 300 KB n = 32
10 Correct 1 ms 212 KB n = 32
11 Correct 1 ms 212 KB n = 32
12 Correct 1 ms 296 KB n = 32
13 Correct 1 ms 212 KB n = 32
14 Correct 1 ms 212 KB n = 32
15 Correct 1 ms 304 KB n = 32
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB n = 32
2 Correct 1 ms 300 KB n = 32
3 Correct 1 ms 212 KB n = 32
4 Correct 1 ms 212 KB n = 32
5 Correct 1 ms 212 KB n = 32
6 Correct 1 ms 212 KB n = 32
7 Correct 1 ms 212 KB n = 32
8 Correct 1 ms 212 KB n = 32
9 Correct 1 ms 212 KB n = 32
10 Correct 1 ms 304 KB n = 32
11 Correct 1 ms 212 KB n = 32
12 Correct 1 ms 212 KB n = 32
13 Correct 1 ms 212 KB n = 32
14 Correct 1 ms 212 KB n = 32
15 Correct 1 ms 212 KB n = 32
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 468 KB n = 128
2 Correct 2 ms 468 KB n = 128
3 Correct 2 ms 428 KB n = 128
4 Correct 2 ms 468 KB n = 128
5 Correct 1 ms 468 KB n = 128
6 Correct 2 ms 556 KB n = 128
7 Correct 2 ms 468 KB n = 128
8 Correct 2 ms 468 KB n = 128
9 Correct 2 ms 424 KB n = 128
10 Correct 2 ms 428 KB n = 128
11 Correct 2 ms 432 KB n = 128
12 Correct 2 ms 468 KB n = 128
13 Correct 2 ms 468 KB n = 128
14 Correct 2 ms 468 KB n = 128
15 Correct 2 ms 468 KB n = 128
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 424 KB n = 128
2 Correct 1 ms 428 KB n = 128
3 Correct 1 ms 468 KB n = 128
4 Correct 2 ms 468 KB n = 128
5 Correct 2 ms 468 KB n = 128
6 Correct 2 ms 428 KB n = 128
7 Correct 2 ms 496 KB n = 128
8 Correct 2 ms 468 KB n = 128
9 Correct 2 ms 468 KB n = 128
10 Correct 2 ms 468 KB n = 128
11 Correct 2 ms 468 KB n = 128
12 Correct 2 ms 428 KB n = 128
13 Correct 2 ms 468 KB n = 128
14 Correct 2 ms 468 KB n = 128
15 Correct 1 ms 428 KB n = 128