답안 #829942

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
829942 2023-08-18T16:03:52 Z Blagoj 최후의 만찬 (IOI12_supper) C++17
39 / 100
2500 ms 20868 KB
#include <bits/stdc++.h>
#include "advisor.h"

using namespace std;

void ComputeAdvice(int *C, int N, int K, int M) {
    queue<int> toDelete;
	unordered_map<int, int> cnt;
	set<int> s[N + 2];
	int Last[N + 2];
	for (int i = 0; i < N; i++) {
		cnt[C[i]]++;
		s[C[i]].insert(i + K);
	}
	for (int i = 0; i < K; i++) {
		Last[i] = i;
		if (!cnt[i]) toDelete.push(i);
	}
	vector<int> op(N + K);
	unordered_set<int> have;
	for (int i = 0; i < K; i++) {
		have.insert(i);
		if (!cnt[i]) op[i] = 1;
	}
	for (int i = 0; i < N; i++) {
		Last[C[i]] = i + K;
		if (have.count(C[i])) {
			cnt[C[i]]--;
			if (!cnt[C[i]]) {
				toDelete.push(C[i]);
				op[i + K] = 1;
			}
		}
		else {
			if (toDelete.size() == 0) {
				int last, position = -1;
				for (int x : have) {
					int temp = *s[x].lower_bound(i); 
					if (temp > position) {
						position = temp;
						last = x;
					}
				}
				toDelete.push(last);
				op[Last[last]] = 1;
			}
			int fr = toDelete.front();
			toDelete.pop();
			have.erase(fr);
			have.insert(C[i]);
			cnt[C[i]]--;
			if (!cnt[C[i]]) {
				toDelete.push(C[i]);
				op[i + K] = 1;
			}
		}
	}
	for (int i = 0; i < op.size(); i++) {
		WriteAdvice(op[i]);
	}
}
#include <bits/stdc++.h>
#include "assistant.h"

using namespace std;

void Assist(unsigned char *A, int N, int K, int R) {
    queue<int> toDelete;
	unordered_set<int> have;
	for (int i = 0; i < K; i++) {
		if (A[i] == 1) toDelete.push(i);
		have.insert(i);
	}
	for (int i = 0; i < N; i++) {
        int req = GetRequest();
		if (!have.count(req)) {
			PutBack(toDelete.front());
			have.erase(toDelete.front());
			toDelete.pop();
			have.insert(req);
		}
        if (A[i + K] == 1) {
			toDelete.push(req);
		}
	}
}

Compilation message

advisor.cpp: In function 'void ComputeAdvice(int*, int, int, int)':
advisor.cpp:58:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |  for (int i = 0; i < op.size(); i++) {
      |                  ~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 516 KB Output is correct
2 Correct 1 ms 508 KB Output is correct
3 Correct 2 ms 904 KB Output is correct
4 Incorrect 4 ms 916 KB Error - Putting back a color that is not on the scaffold
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 2264 KB Output is correct
2 Incorrect 750 ms 8220 KB Output isn't correct - not an optimal way
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 68 ms 14528 KB Output is correct
2 Correct 86 ms 19136 KB Output is correct
3 Correct 86 ms 19304 KB Output is correct
4 Correct 102 ms 19148 KB Output is correct
5 Correct 991 ms 17752 KB Output is correct
6 Correct 78 ms 19296 KB Output is correct
7 Correct 95 ms 19156 KB Output is correct
8 Correct 92 ms 20868 KB Output is correct
9 Execution timed out 2559 ms 14788 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 1304 KB Output is correct
2 Correct 5 ms 1592 KB Output is correct
3 Incorrect 5 ms 1184 KB Output isn't correct - not an optimal way
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 363 ms 17372 KB Output is correct - 120000 bits used
2 Correct 81 ms 17916 KB Output is correct - 122000 bits used
3 Correct 92 ms 18252 KB Output is correct - 125000 bits used
4 Correct 87 ms 18216 KB Output is correct - 125000 bits used
5 Correct 89 ms 18152 KB Output is correct - 125000 bits used
6 Correct 107 ms 18080 KB Output is correct - 125000 bits used
7 Correct 84 ms 18132 KB Output is correct - 124828 bits used
8 Correct 122 ms 18140 KB Output is correct - 124910 bits used
9 Correct 92 ms 18068 KB Output is correct - 125000 bits used
10 Correct 229 ms 19640 KB Output is correct - 125000 bits used