#include "coreputer.h"
#include <bits/stdc++.h>
using namespace std;
int Ask (vector <int> x) {
vector <int> ret;
for (int i = 0; i < (int)x.size(); i++) {
if (x[i]) {
ret.push_back(i);
}
}
return run_diagnostic(ret);
}
vector <int> malfunctioning_cores (int n) {
int l = 0, r = n - 1, p = -1, t = -1;
int v = 0;
int flag = 0;
while (l < r) {
int m = (l + r) / 2;
vector <int> c(n, 0);
for (int i = 0; i <= m; i++) {
c[i] = 1;
}
v++;
int s = Ask(c);
if (s == -1) {
l = m + 1;
} else {
r = m; t = s;
}
}
if (t == -1) {
t = 1;
}
assert(v <= 4);
p = l;
vector <int> ans(n, 0);
ans[p] = 1;
int cnt = 0;
int e = 0;
for (int i = 0; i < p; i++) {
vector <int> c(n, 0);
for (int j = 0; j <= p; j++) {
c[j] = 1;
}
c[i] = 0;
e++;
if (Ask(c) != t) {
ans[i] = 1; cnt++;
}
}
if (t == 0) cnt++;
assert(e == p);
for (int i = p + 1; i < n; i++) {
if (cnt == 1) {
int l = i, r = n - 1;
while (l < r) {
int m = (l + r) / 2;
vector <int> c(n, 0);
for (int j = 0; j <= p; j++) {
c[j] = 1;
}
for (int j = l; j <= m; j++) {
c[j] = 1;
}
if (t == 1) {
c[p] = 0;
}
int z = Ask(c);
e++;
if ((t == 1 && z != -1) || (t == 0 && z != 0)) {
r = m;
} else {
l = m + 1;
}
}
cnt--;
ans[l] = 1;
break;
}
vector <int> c(n, 0);
for (int j = 0; j <= p; j++) {
c[j] = 1;
}
if (t == 1) {
c[p] = 0;
}
c[i] = 1;
int z = Ask(c);
if ((t == 1 && z != -1) || (t == 0 && z != 0)) {
cnt--; ans[i] = 1;
}
}
//assert(e <= n - 2);
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |