#include "koala.h"
#include <algorithm>
#include <iostream>
#include <numeric>
#include <cassert>
#include <vector>
typedef long long llong;
const int MAXN = 128;
const int INF = 1e9;
int n, w;
int __b[MAXN];
int __r[MAXN];
std::vector <int> play(const std::vector <int> &b)
{
assert(b.size() == n);
for (int i = 0 ; i < n ; ++i)
{
__b[i] = b[i];
}
playRound(__b, __r);
std::vector <int> r(n);
for (int i = 0 ; i < n ; ++i)
{
r[i] = __r[i];
}
return r;
}
int minValue(int N, int W)
{
n = N; w = W;
std::vector <int> askFor(n, 0);
askFor[0] = 1;
std::vector <int> r = play(askFor);
for (int i = 0 ; i < N ; ++i)
{
if (r[i] == 0)
{
return i;
}
}
// TODO: Implement Subtask 1 solution here.
// You may leave this function unmodified if you are not attempting this
// subtask.
return 0;
}
int maxValue(int N, int W)
{
n = N; w = W;
int step = 1;
std::vector <int> candidates(n);
std::iota(candidates.begin(), candidates.end(), 0);
while (candidates.size() > 1)
{
std::vector <int> b(n, 0);
for (const int &pos : candidates)
{
b[pos] = w / candidates.size();
}
// step = 2 * step;
std::vector <int> r = play(b);
std::vector <int> newCandidates;
for (const int &pos : candidates)
{
if (r[pos] > b[pos])
{
newCandidates.push_back(pos);
}
}
candidates = newCandidates;
}
// TODO: Implement Subtask 2 solution here.
// You may leave this function unmodified if you are not attempting this
// subtask.
return candidates[0];
}
bool cmp(int x, int y)
{
int times = 0;
int l = 0, rr = 9, mid;
while (l + 1 < rr)
{
times++;
mid = l + (rr - l + 1) / 2;
std::vector <int> b(n, 0);
b[x] = b[y] = mid;
std::vector <int> r = play(b);
if (r[x] > b[x] && r[y] <= b[y]) return false;
if (r[y] > b[y] && r[x] <= b[x]) return true;
if (r[x] <= b[x]) rr = mid;
else l = mid;
}
assert(false);
}
int greaterValue(int N, int W)
{
n = N; w = W;
// n = N; w = W;
// std::vector <int> toAsk(n, 0);
// toAsk[0] = toAsk[1] = 1;
// std::vector <int> r = play(toAsk);
// if ()
// TODO: Implement Subtask 3 solution here.
// You may leave this function unmodified if you are not attempting this
// subtask.
return cmp(0, 1);
}
bool sigmaCMP(int x, int y)
{
std::vector <int> b(n, 0);
b[x] = b[y] = w / 2;
std::vector <int> r = play(b);
if (r[x] > w) return false;
return true;
}
int toSort[MAXN];
int cpy[MAXN];
void sigmaMerge(int l, int r)
{
if (l == r)
{
return;
}
int mid = (l + r) / 2;
sigmaMerge(l, mid);
sigmaMerge(mid + 1, r);
int lPtr = l, rPtr = mid + 1, ptr = l;
while (lPtr <= mid || rPtr <= r)
{
if (lPtr == mid + 1)
{
cpy[ptr++] = toSort[rPtr++];
continue;
}
if (rPtr == r + 1)
{
cpy[ptr++] = toSort[lPtr++];
continue;
}
if (sigmaCMP(toSort[lPtr], toSort[rPtr]))
{
cpy[ptr++] = toSort[lPtr++];
} else
{
cpy[ptr++] = toSort[rPtr++];
}
}
for (int i = l ; i <= r ; ++i)
{
toSort[i] = cpy[i];
}
}
void allValues(int N, int W, int *P)
{
n = N; w = W;
if (W == 2*N)
{
std::iota(toSort, toSort + n, 0);
sigmaMerge(0, n - 1);
for (int i = 0 ; i < n ; ++i)
{
P[toSort[i]] = i;
}
} else {
// TODO: Implement Subtask 5 solution here.
// You may leave this block unmodified if you are not attempting this
// subtask.
}
}
Compilation message
In file included from /usr/include/c++/10/cassert:44,
from koala.cpp:5:
koala.cpp: In function 'std::vector<int> play(const std::vector<int>&)':
koala.cpp:17:21: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
17 | assert(b.size() == n);
| ~~~~~~~~~^~~~
koala.cpp: In function 'int maxValue(int, int)':
koala.cpp:57:9: warning: unused variable 'step' [-Wunused-variable]
57 | int step = 1;
| ^~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
344 KB |
Output is correct |
2 |
Correct |
4 ms |
344 KB |
Output is correct |
3 |
Correct |
5 ms |
504 KB |
Output is correct |
4 |
Correct |
3 ms |
596 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
12 ms |
344 KB |
Output is correct |
2 |
Correct |
10 ms |
504 KB |
Output is correct |
3 |
Correct |
10 ms |
344 KB |
Output is correct |
4 |
Correct |
13 ms |
452 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
47 ms |
476 KB |
Output is correct |
2 |
Partially correct |
52 ms |
472 KB |
Output is partially correct |
3 |
Correct |
42 ms |
464 KB |
Output is correct |
4 |
Correct |
45 ms |
476 KB |
Output is correct |
5 |
Partially correct |
43 ms |
472 KB |
Output is partially correct |
6 |
Correct |
45 ms |
596 KB |
Output is correct |
7 |
Partially correct |
47 ms |
464 KB |
Output is partially correct |
8 |
Correct |
41 ms |
468 KB |
Output is correct |
9 |
Correct |
51 ms |
476 KB |
Output is correct |
10 |
Correct |
45 ms |
596 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
18 ms |
452 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
344 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |