제출 #1168

#제출 시각아이디문제언어결과실행 시간메모리
1168kriii올림픽 피자 (tutorial5)C++98
100 / 100
58 ms1096 KiB
#include "pizza.h"
#include <queue>
using namespace std;

int ing[8],have,ordernumber;
queue<int> orderlist[1<<8];

void Init(){
	int i;

	for (i=0;i<(1<<8);i++) while (!orderlist[i].empty()) orderlist[i].pop();
	for (i=0;i<8;i++) ing[i] = 0;
	have = ordernumber = 0;
}

void Order(int N, int *A) {
	int what = 0, i;

	for (i=0;i<N;i++) what += 1 << A[i];

	if ((have & what) == what){
		for (i=0;i<N;i++){
			if (--ing[A[i]] == 0) have -= 1 << A[i];
		}
		Bake(ordernumber);
	}
	else orderlist[what].push(ordernumber);
	ordernumber++;
}

void Delivery(int I) {
	int i,num=ordernumber,x;

	if (ing[I]++ == 0){
		have += 1 << I;
		
		for (i=have;i;i=have&(i-1)){
			if (!orderlist[i].empty()){
				if (num > orderlist[i].front()){
					num = orderlist[i].front();
					x = i;
				}
			}
		}
		if (num < ordernumber){
			for (i=0;i<8;i++) if (x & (1 << i)){
				if (--ing[i] == 0) have -= 1 << i;
			}
			Bake(num);
			orderlist[x].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...