제출 #63008

#제출 시각아이디문제언어결과실행 시간메모리
63008SpaimaCarpatilor최후의 만찬 (IOI12_supper)C++17
0 / 100
138 ms24060 KiB
#include "advisor.h"
#include<bits/stdc++.h>

using namespace std;

static int lst[100009];

void ComputeAdvice(int *C, int N, int K, int M)
{
    for (int i=0; i<N; i++)
        lst[i] = -1;
    for (int i=0; i<N; i++)
        lst[C[i]] = i;
    for (int i=0; i<K; i++)
        WriteAdvice (lst[i] == -1);
    for (int j=0; j<N; j++)
        WriteAdvice (lst[C[j]] == j);
}
#include "assistant.h"
#include<bits/stdc++.h>

using namespace std;

static bool ap[100009], dispensable[100009];
static queue < int > canDispense;
static set < int > inSet;

void Assist(unsigned char *A, int N, int K, int R)
{
    for (int i=0; i<K; i++)
    {
        ap[i] = 1,
        dispensable[i] = A[i];
        if (dispensable[i])
            canDispense.push (i);
        else
            inSet.insert (i);
    }
    for (int i = 0; i < N; i++)
    {
        int req = GetRequest();
        if (ap[req])
        {
            if (A[K + i])
                dispensable[req] = 1, canDispense.push (req), inSet.erase (req);
            continue;
        }
        if (!canDispense.empty ())
        {
            int c = canDispense.front ();
            canDispense.pop ();
            ap[c] = 0;
            PutBack (c);
        }
        else
        {
            auto it = inSet.begin ();
            int c = *it;
            inSet.erase (it);
            ap[c] = 0;
            PutBack (c);
        }
        if (A[K + i])
            dispensable[req] = ap[req] = 1, canDispense.push (req);
        else
            ap[req] = 1, inSet.insert (req);
    }
}
#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...