Submission #1400928

#TimeUsernameProblemLanguageResultExecution timeMemory
1400928SulALast supper (IOI12_supper)C++20
0 / 100
109 ms9404 KiB
#include <bits/stdc++.h>
#include "advisor.h"
using namespace std;

void ComputeAdvice(int *C, int n, int k, int m) {
    vector<int> pos[n];
    for (int i = k; i < n + k; i++) {
        pos[C[i - k]].push_back(i);
    }
    for (int i = 0; i < n; i++)
        pos[i].push_back(n + k);

    int last[n]{};
    fill(last, last + n, -1);
    int remove[n + k]{};
    set<pair<int,int>> s;
    for (int i = 0; i < k; i++) {
        s.emplace(pos[i][0], i);
        last[i] = i;
    }
    for (int i = k; i < n + k; i++) {
        int val = C[i - k];
        int nxt = *upper_bound(pos[val].begin(), pos[val].end(), i);
        if (last[val] != -1) {
            s.erase({i, last[val]});
        } else {
            auto [x, y] = *s.rbegin();
            s.erase(prev(s.end()));
            remove[y] = true;
        }
        s.emplace(nxt, i);
        last[val] = i;
    }
    for (int i = 0; i < n + k; i++) {
        cerr<<remove[i];
        WriteAdvice(remove[i]);
    }
    cerr<<endl;
//    exit(0);
}
#include <bits/stdc++.h>
#include "assistant.h"
using namespace std;

void Assist(unsigned char *A, int n, int k, int r) {
    assert(r == n + k);
    bool scaff[n]{};
    set<int> s;
    for (int i = 0; i < k; i++) {
        scaff[i] = true;
        if (A[i]) {
            s.insert(i);
        }
    }
    for (int i = k; i < n + k; i++) {
        int color = GetRequest();
        if (A[i] == 0 && scaff[color]) {
            s.erase(color);
        }
        if (!scaff[color]) {
            assert(!s.empty());
            int rem = *s.begin();
            s.erase(s.begin());
            PutBack(rem);
            scaff[rem] = false;
            scaff[color] = true;
        }
        if (A[i]) {
            s.insert(color);
        }
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...