제출 #1340484

#제출 시각아이디문제언어결과실행 시간메모리
1340484SulAUnscrambling a Messy Bug (IOI16_messy)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
#define all(a) (a).begin(), (a).end()
#define popcount __builtin_popcountll
using namespace std;
using namespace __gnu_pbds;
template<typename T> using ordered_set = tree<T, null_type, less_equal<>, rb_tree_tag, tree_order_statistics_node_update>;

// vector<int> P(128);

// void init() {
//     for (int i = 0; i < 128; i++)
//         P[i] = (i + 1) % 128;
// }

// string apply(string s) {
//     string t(128, ' ');
//     for (int i = 0; i < 128; i++)
//         t[i] = s[P[i]];
//     return t;
// }

// set<string> strs;
// int reads = 0;
// void add_element(string s) { strs.insert(apply(s)); }
// void compile_set() {}
// bool check_element(string s) { reads++; return strs.count(s); }

void insert(int l, int r, string& num) {
    if (l+1 == r) return;
    int mid = (l+r)/2;
    for (int i = l; i < mid; i++) {
        num[i] = '1';
        add_element(num);
        num[i] = '0';
    }
    for (int i = l; i < r; i++) {
        num[i] = i < mid ? '0' : '1';
    }
    insert(l, mid, num);
    for (int i = l; i < r; i++) {
        num[i] = i < mid ? '1' : '0';
    }
    insert(mid, r, num);
    for (int i = l; i < r; i++)
        num[i] = '0';
}

vector<int> p;

void restore(int l, int r, string& num, vector<int> cand) {
    if (r-l == 1) {
        p[cand[0]] = l;
        return;
    }
    int mid = (l+r)/2;
    vector<int> left, right;
    for (int x : cand) {
        num[x] = '1';
        int res = check_element(num);
        (res ? left : right).push_back(x);
        num[x] = '0';
    }
    for (int i : right) num[i] = '1';
    restore(l, mid, num, left);
    for (int i : right) num[i] = '0';

    for (int i : left)  num[i] = '1';
    restore(mid, r, num, right);
    for (int i : left)  num[i] = '0';
}

vector<int> restore_permutation(int n, int w, int r) {
    string num(n, '0');
    insert(0, n, num);
    compile_set();
    vector<int> cand(n);
    iota(all(cand), 0);
    p.resize(n);
    restore(0, n,  num, cand);
    return p;
}

컴파일 시 표준 에러 (stderr) 메시지

messy.cpp: In function 'void insert(int, int, std::string&)':
messy.cpp:35:9: error: 'add_element' was not declared in this scope
   35 |         add_element(num);
      |         ^~~~~~~~~~~
messy.cpp: In function 'void restore(int, int, std::string&, std::vector<int>)':
messy.cpp:61:19: error: 'check_element' was not declared in this scope
   61 |         int res = check_element(num);
      |                   ^~~~~~~~~~~~~
messy.cpp: In function 'std::vector<int> restore_permutation(int, int, int)':
messy.cpp:77:5: error: 'compile_set' was not declared in this scope
   77 |     compile_set();
      |     ^~~~~~~~~~~