제출 #1146344

#제출 시각아이디문제언어결과실행 시간메모리
1146344daveleUnscrambling a Messy Bug (IOI16_messy)C++20
38 / 100
1 ms328 KiB
#include <vector>
#ifndef davele
#include "messy.h"
#endif // davele

#include <bits/stdc++.h>
#define pii pair<int, int>
#define fi first
#define se second
#define vi vector <int>
#define pq priority_queue
#define MASK(i) (1ll<<(i))
#define BIT(x, i) (((x) >> (i)) & 1)
#define x0 ___x0
#define y0 ___y0
#define div   ___div
#define next   ___next
#define prev   ___prev
#define left   ___left
#define right   ___right
#define pos pisosi
#define pb push_back
#define pf push_front
using namespace std;

//const int mod = ;
//void add (int &a, const int&b){
//    a+=b;
//    if (a>=mod) a-=mod;
//}
//
//void sub (int&a, const int&b){
//    a-=b;
//    if (a<0) a+=mod;
//}
//
//void mul (int&a, const int&b){
//    a*=b;
//    a%=mod;
//}

template<class X, class Y>
    bool minimize(X &x, const Y&y){
        if (x<=y) return false;
        else{
            x = y;
            return true;
        }
    }
template<class X, class Y>
    bool maximize (X &x, const Y&y){
        if (x>=y) return false;
        else{
            x = y;
            return true;
        }
    }

/////////////////////////////////////////////////////////////////////////////////
//const int lim = , limit = , inf = ;


//// dang nhap ham
#ifndef davele
vector<int> restore_permutation(int n, int w, int r) {
    for (int i=1; i<=n; i++){
        string tmp = "";
        for (int j=1; j<=i; j++) tmp+="1";
        for (int j=i+1; j<=n; j++) tmp+="0";
        add_element(tmp);
    }
    compile_set();
    set <int> ds;
    for (int i=0; i<n; i++) ds.insert(i);
    vector <int> ret(n, -1);
    string query(n, ' ');
    for (int i=0; i<n; i++){
        for (int j=0; j<n; j++) query[j] = '0';
        for (int j=0; j<n; j++) if (ret[j]>=0) query[j] = '1';
        for (int x:ds){
            query[x] = '1';
            if (check_element(query)){
//                cerr<<query<<"\n";
                ret[x] = i;
                ds.erase(x);
                break;
            }
            query[x]='0';
        }
    }
    return ret;
}

#endif // davele
//
//// chay thu ham main:
//
#ifdef davele


int n, w, r;
int p[1005];
set <string> set_;

void add_element(string x) {
    set_.insert(x);
}

bool check_element(string x) {
    return set_.count(x);
}

void compile_set() {
    set<string> compiledSet;
    string compiledElement = string(n, ' ');
    for (set<string>::iterator it = set_.begin(); it != set_.end(); it++) {
        string s = *it;
        for (int i = 0; i < n; i++) {
            compiledElement[i] = s[p[i]];
        }
        compiledSet.insert(compiledElement);
    }
    set_ = compiledSet;
}

vector<int> restore_permutation(int n, int w, int r) {
    for (int i=1; i<=n; i++){
        string tmp = "";
        for (int j=1; j<=i; j++) tmp+="1";
        for (int j=i+1; j<=n; j++) tmp+="0";
        add_element(tmp);
    }
    compile_set();
    set <int> ds;
    for (int i=0; i<n; i++) ds.insert(i);
    vector <int> ret(n, -1);
    string query(n, ' ');
    for (int i=0; i<n; i++){
        for (int j=0; j<n; j++) query[j] = '0';
        for (int j=0; j<n; j++) if (ret[j]>=0) query[j] = '1';
        for (int x:ds){
            query[x] = '1';
            if (check_element(query)){
//                cerr<<query<<"\n";
                ret[x] = i;
                ds.erase(x);
                break;
            }
            query[x]='0';
        }
    }
    return ret;
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    //

//    freopen (".inp", "r", stdin);
//    freopen (".out", "w", stdout);
    cin>>n>>w>>r;
    for (int i=0; i<n; i++) cin>>p[i];
    vi tmp = restore_permutation(n, w, r);
    for (int x:tmp) cout<<x<<" ";

}
#endif // davele

////////////////////////////////////////////////////////////////////////////




컴파일 시 표준 에러 (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...