#include "advisor.h"
#include <bits/stdc++.h>
using namespace std;
void ComputeAdvice (int *c, int n, int k, int m) {
vector <int> occ[n];
for (int i = 0; i < n; i++) {
occ[c[i]].push_back(i);
}
for (int i = 0; i < n; i++) {
occ[i].push_back(n);
}
set <pair <int, int>> ii;
set <int> jj;
vector <int> pp(n, 0);
for (int i = 0; i < k; i++) {
pp[i] = i;
ii.insert({occ[i][0], i});
jj.insert(i);
}
vector <int> e(n, 0);
for (int i = 0; i < n; i++) {
if (jj.count(c[i])) {
e[i] = -1; continue;
}
auto x = *(--ii.end());
ii.erase(x); jj.erase(x.second);
e[i] = pp[x.second];
pp[c[i]] = pp[x.second];
pp[x.second] = 0;
auto g = *lower_bound(occ[c[i]].begin(), occ[c[i]].end(), i + 1);
ii.insert({g, c[i]});
jj.insert(c[i]);
}
for (int i = 0; i < n; i++) {
WriteAdvice(e[i] == -1);
}
int f = __lg(k) + 1;
for (int j = 0; j < n; j++) {
if (e[j] == -1) {
continue;
}
for (int k = 0; k < f; k++) {
WriteAdvice((e[j] >> k) & 1);
}
}
}
#include "assistant.h"
#include <bits/stdc++.h>
using namespace std;
void Assist (unsigned char *a, int n, int k, int r) {
vector <int> useless(n, 0);
for (int i = 0; i < n; i++) {
useless[i] = a[i];
}
int f = __lg(k) + 1;
vector <int> cur(k, 0);
int bit = n;
iota(cur.begin(), cur.end(), 0);
for (int i = 0; i < n; i++) {
int x = GetRequest();
if (!useless[i]) {
int idx = 0;
for (int j = 0; j < f; j++) {
if (a[bit++] == 1) {
idx |= 1 << j;
}
}
PutBack(cur[idx]);
cur[idx] = x;
}
}
}
# | 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... |