Submission #1201730

#TimeUsernameProblemLanguageResultExecution timeMemory
1201730madamadam3Art Collections (BOI22_art)C++20
0 / 100
0 ms408 KiB
#include "art.h"
#include <bits/stdc++.h>

using namespace std;
using vi = vector<int>;

#define all(x) (x).begin(), (x).end()
#define mp(x) iota(all((x)), 1)

int n;

vi make_perm(vi &order) {
    vi rt(n, -1);
    set<int> avail; for (int i = 1; i <= n; i++) avail.insert(i);

    for (int i = 1; i <= order.size(); i++) {
        avail.erase(order[i - 1]);
        rt[i-1] = order[i - 1]; 
    }

    for (int i = 1; i <= n; i++) {
        if (rt[i-1] != -1) continue;
        rt[i-1] = *avail.begin();
        avail.erase(avail.begin());
    }

    return rt;
}


int best_at(vi &order, set<int> used) {
    int pos = order.size() + 1;
    vi cur_order = order;

    int best = INT_MAX, best_idx = -1;
    for (int i = 1; i <= n; i++) {
        if (used.count(i)) continue;
        cur_order.push_back(i);
        int res = publish(make_perm(cur_order));
        cur_order.pop_back();

        if (res <= best) {
            best = res;
            best_idx = i;
        }
    }

    return best_idx;
}

void solve(int N) {
    n = N;
    vi order;
    set<int> used;

    while (order.size() < n) {
        int best = best_at(order, used);
        order.push_back(best);
        used.insert(best);
    }

    answer(order);
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...