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 "koala.h"
#include <algorithm>
#include <vector>
#include <numeric>
using namespace std;
using vi=vector<int>;
vi Play(vi q) {
vi ret(q.size());
playRound(q.data(), ret.data());
return ret;
}
int minValue(int N, int W) {
vi v(N);
v[0] = 1;
vi res = Play(v);
if (res[0] >= 1) res[0] -= 1;
for (int i=0; i<N; ++i) if (!res[i]) return i;
return 0;
}
int maxValue(int N, int W) {
vi larger(N);
iota(larger.begin(), larger.end(), 0);
while (larger.size() > 1u) {
vi mask(N);
int afford = W / larger.size();
for (int i:larger) mask[i] = afford;
auto res = Play(mask);
vi larger_new;
for (int i:larger) if (res[i]) larger_new.push_back(i);
larger = larger_new;
}
return larger[0];
}
int greaterValue(int N, int W) {
int l = 0, r = 15;
vi q(N);
for (;;) {
int m = (l+r)/2;
q[0] = q[1] = m;
vi res = Play(q);
if (res[0] != res[1]) {
return res[0] < res[1];
}
if (!res[0]) r = m;
else l = m;
}
return 0;
}
void allValues(int N, int W, int *P) {
if (W == 2*N) {
vi v(N);
iota(v.begin(), v.end(), 0);
vi buf(N);
sort(v.begin(), v.end(), [&](const int& a, const int& b) {
buf[a] = buf[b] = 100;
vi tmp = Play(buf);
buf[a] = buf[b] = 0;
return tmp[a] < tmp[b];
});
for (int i=0; i<N; ++i) P[buf[i]] = i+1;
} else {
// TODO: Implement Subtask 5 solution here.
// You may leave this block unmodified if you are not attempting this
// subtask.
}
}
# | 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... |