제출 #65194

#제출 시각아이디문제언어결과실행 시간메모리
65194gnoor최후의 만찬 (IOI12_supper)C++17
0 / 100
221 ms21384 KiB

#include "advisor.h"

int cntt[100100];

void ComputeAdvice(int *C, int N, int K, int M) {
	for (int i=0;i<N;i++) {
		cntt[C[i]]++;
	}
	for (int i=0;i<N;i++) {
		for (int j=0;j<cntt[i];j++) {
			WriteAdvice(0);
		}
		WriteAdvice(1);
	}
}

#include "assistant.h"

#include <vector>
#include <set>

using namespace std;

int cnt[100100];
bool removable[100100];

set<int> rminscf;
set<int> inscf;

void Assist(unsigned char *A, int N, int K, int R) {

	int cur=0;
	for (int i=0;i<R;i++) {
		if (A[i]==0) cnt[cur]++;
		else cur++;
	}

	for (int i=0;i<N;i++) {
		if (cnt[i]==0) removable[i]=true;
	}

	for (int i=0;i<K;i++) {
		if (removable[i]) rminscf.insert(i);
		else inscf.insert(i);
	}

	int req;
	for (int i=0;i<N;i++) {
		req=GetRequest();
		if (inscf.find(req)==inscf.end()&&rminscf.find(req)==rminscf.end()) {
			//req is not in scf
			if (!rminscf.empty()) {
				PutBack(*rminscf.begin());
				rminscf.erase(rminscf.begin());
			} else {
				PutBack(*inscf.begin());
				inscf.erase(inscf.begin());
			}
			inscf.insert(req);
		}

		cnt[req]--;
		if (cnt[req]==0) {
			removable[req]=true;
			inscf.erase(req);
			rminscf.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...