Submission #1223447

#TimeUsernameProblemLanguageResultExecution timeMemory
1223447thangdz2k7Last supper (IOI12_supper)C++20
0 / 100
41 ms4628 KiB
#include "advisor.h"
#include <bits/stdc++.h>

using namespace std;

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

	vector <int> colors(K);
	iota(colors.begin(), colors.end(), 0);
	for (int i = 0; i < N; ++ i) 
		colors.push_back(C[i]);

	vector <int> Next(N + K, N + K), To(N + K);
	for (int i = N + K - 1; i >= 0; -- i){
		To[i] = Next[colors[i]];
		Next[colors[i]] = i;
	}

	vector <int> cur(N, -1);
	priority_queue <pair <int, int>> max_out_time;

	for (int i = 0; i < K; ++ i){
		int c = colors[i];
		cur[c] = i;
		max_out_time.push(make_pair(To[i], c));
	}

	vector <int> important(N + K, 1);

	for (int i = K; i < N + K; ++ i){
		int c = colors[i];
		if (cur[c] == -1){
			auto [t, o] = max_out_time.top();
			max_out_time.pop();
			important[cur[o]] = 0;
			cur[o] = -1;
		}

		cur[c] = i;
		max_out_time.push(make_pair(To[i], c));
	}

	for (int i = 0; i < N + K; ++ i) 
		WriteAdvice(important[i]);
}
#include "assistant.h"
#include <bits/stdc++.h>

using namespace std;

void Assist(unsigned char *A, int N, int K, int R){
	vector <int> can_pop, in(N, 0);
	for (int i = 0; i < K; ++ i){
		in[i] = 1;
		if (!A[i]) can_pop.push_back(i);
	}

	for (int i = K; i < N + K; ++ i){
		int c = GetRequest();
		if (!in[c]){
			PutBack(can_pop.back());
			can_pop.pop_back();
		} 
		in[c] = 1;
		if (!A[i]) can_pop.push_back(c);
	}
}
#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...