Submission #16670

#TimeUsernameProblemLanguageResultExecution timeMemory
16670CodingBug올림픽 피자 (tutorial5)C++98
100 / 100
82 ms1732 KiB
#include "pizza.h"
#include <queue>
#define M 8

using namespace std;

int p,a[M],c;
queue<int> Q[1<<M];

void Init() {
    int i;
    p=0,c=-1;
    for(i=0;i<M;i++) a[i]=0;
    for(i=0;i<(1<<M);i++) while(!Q[i].empty()) Q[i].pop();
}

void Order(int N, int *A) {
    int ord=0,i;
    c++;
    for(i=0;i<N;i++) ord|=(1<<A[i]);
    if((p&ord)==ord){
        Bake(c);
        for(i=0;i<M;i++){
            if(ord&(1<<i)){
                a[i]--;
                if(!a[i]){
                    p-=(1<<i);
                }
            }
        }
    }
    else{
        Q[ord].push(c);
    }
}

void Delivery(int I) {
    a[I]++;
    if(a[I]==1){
        p|=(1<<I);
        int mn=c+1,v=-1,i;
        for(i=0;i<(1<<M);i++){
            if((p&i)==i && !Q[i].empty()){
                if(mn>Q[i].front()){
                    mn=Q[i].front();
                    v=i;
                }
            }
        }
        if(v!=-1){
            Bake(Q[v].front());
            for(i=0;i<M;i++){
                if(v&(1<<i)){
                    a[i]--;
                    if(!a[i]) p-=(1<<i);
                }
            }
            Q[v].pop();
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...