This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "advisor.h"
#include <bits/stdc++.h>
using namespace std;
void ComputeAdvice(int *a, int n, int k, int ___) {
vector<int> solution;
vector<int> when(n);
int tt = 0;
vector<vector<int>> nxt(n, vector<int> (1, n + 1));
for (int i = n - 1; i >= 0; i--) {
nxt[a[i]].push_back(i);
}
set<int> active_guys;
set<pair<int, int>> nxt_time;
for (int i = 0; i < k; i++) {
active_guys.insert(i);
nxt_time.insert({nxt[i].back(), i});
}
for (int i = 0; i < k; i++) {
when[i] = tt++;
solution.push_back(0);
}
int rr = 0;
for (int i = 0; i < n; i++) {
assert((int) nxt_time.size() == k);
if (!nxt_time.count({nxt[a[i]].back(), a[i]})) {
auto it = nxt_time.end(); it--;
int guy = it->second;
nxt_time.erase(it);
nxt_time.insert({nxt[a[i]].back(), a[i]});
rr++;
} else {
solution[when[a[i]]] = 1;
}
when[a[i]] = tt++;
solution.push_back(0);
nxt[a[i]].pop_back();
assert(nxt_time.count({i, a[i]}));
nxt_time.erase({i, a[i]});
nxt_time.insert({nxt[a[i]].back(), a[i]});
}
assert((int) nxt_time.size() == k);
for (auto &x : solution) {
WriteAdvice(x);
}
return;
for (auto &x : solution) {
cout << x << " ";
}
cout << "\n";
exit(0);
WriteAdvice(0);
WriteAdvice(1);
WriteAdvice(2);
}
#include "assistant.h"
#include <bits/stdc++.h>
using namespace std;
void Assist(unsigned char *a, int n, int k, int r) {
set<int> act, skip;
int ptr = 0;
for (int i = 0; i < k; i++) {
act.insert(i);
if (a[ptr++] == 0) {
skip.insert(i);
}
}
//cout << "\t\t\tstart\n";
for (int i = 0; i < n; i++) {
int nxt = GetRequest();
if (!act.count(nxt)) {
assert(!skip.empty());
int x = *skip.begin();
//cout << "\t\t\t" << i << " : " << nxt << ", give " << x << " : " << int(a[ptr]) << " : " << (int) skip.size() << "\n";
skip.erase(x);
assert(act.count(x));
act.erase(x);
act.insert(nxt);
assert(ptr < r);
if (a[ptr++] == 0) {
skip.insert(nxt);
}
PutBack(x);
} else {
if (a[ptr++] == 0) {
skip.insert(nxt);
}
}
}
//exit(0);
return;
/**
int i;
set<int> give;
for (int i = )
for (i = 0; i < n; i++) {
int req = GetRequest();
if (req >= k)
PutBack(req % k);
}
**/
}
Compilation message (stderr)
advisor.cpp: In function 'void ComputeAdvice(int*, int, int, int)':
advisor.cpp:30:11: warning: unused variable 'guy' [-Wunused-variable]
30 | int guy = it->second;
| ^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |