Submission #256262

#TimeUsernameProblemLanguageResultExecution timeMemory
256262AkashiLast supper (IOI12_supper)C++14
100 / 100
106 ms7152 KiB
#include "advisor.h"
#include <bits/stdc++.h>
using namespace std;

void ComputeAdvice(int *C, int N, int K, int M) {

    vector <int> ap(N, N);
    vector <int> Next(N, N);
    for (int i = N - 1; i >= 0 ; --i) {
        Next[i] = ap[C[i]];
        ap[C[i]] = i;
    }

    vector <bool> adv(M, 1);

    set <pair <int, int> > s;
    vector <bool> f(N, 0);

    for (int i = 0; i < K ; ++i) {
        s.insert({ap[i], i});
        f[i] = 1;
    }

    for (int i = 0; i < N ; ++i) {
        if (f[C[i]] == 1) {
            set <pair <int, int> > :: iterator it = s.lower_bound({i, 0});
            s.erase(it);
        } else {
            ///trebuie sa scot o culoare de pe paleta
            set <pair <int, int> > :: reverse_iterator it = s.rbegin();
            adv[it->second] = 0;
            if (it->second < K) f[it->second] = 0;
            else f[C[it->second - K]] = 0;
            s.erase(*it);
        }

        f[C[i]] = 1;
        s.insert({Next[i], i + K});
    }

    for (int i = 0; i < N + K ; ++i) WriteAdvice(adv[i]);

    return ;
}

#include <bits/stdc++.h>
#include "assistant.h"
using namespace std;

void Assist(unsigned char *A, int N, int K, int R) {
    vector <bool> f(N, 0);
    vector <int> rec;

    int ind = 0;
    for (int i = 0; i < K ; ++i, ++ind) {
        if (A[ind] == 0) rec.push_back(i);
        f[i] = 1;
    }

    for (int i = 0; i < N ; ++i, ++ind) {
        int req = GetRequest();
        if (!f[req]) {
            f[req] = 1;
            f[rec.back()] = 0;
            PutBack(rec.back());
            rec.pop_back();
        }

        if (A[ind] == 0) rec.push_back(req);
    }

    return ;
}
/**
4 2 65000
2 0 3 0
**/
#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...