#include "koala.h"
#include <algorithm>
#include <iostream>
#include <numeric>
#include <cassert>
#include <random>
#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 = 1, rr = 9, mid;
while (l + 1 < rr)
{
times++;
mid = l + (rr - l + 1) / 2 + (rr - l == 8);
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;
}
std::vector <int> b(n, 0);
b[x] = b[y] = 1;
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;
assert(false);
}
int greaterValue(int N, int W)
{
n = N; w = W;
int x = 0, y = 1;
int times = 0;
int l = 0, rr = 9, mid;
while (l + 1 < rr)
{
times++;
mid = l + (rr - l + 1) / 2 - (rr - l == 8);
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;
}
}
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] > n) 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 merge(int l, int r)
{
if (l == r)
{
return;
}
int mid = (l + r) / 2;
merge(l, mid);
merge(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 (cmp(toSort[lPtr], toSort[rPtr]))
{
cpy[ptr++] = toSort[lPtr++];
} else
{
cpy[ptr++] = toSort[rPtr++];
}
}
for (int i = l ; i <= r ; ++i)
{
toSort[i] = cpy[i];
}
}
std::mt19937 rng(69420);
void allValues(int N, int W, int *res)
{
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)
{
res[toSort[i]] = i + 1;
}
} else {
std::iota(toSort, toSort + n, 0);
std::shuffle(toSort, toSort + n, rng);
merge(0, n - 1);
for (int i = 0 ; i < n ; ++i)
{
res[toSort[i]] = i + 1;
}
// 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:18:21: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
18 | assert(b.size() == n);
| ~~~~~~~~~^~~~
koala.cpp: In function 'int maxValue(int, int)':
koala.cpp:58:9: warning: unused variable 'step' [-Wunused-variable]
58 | int step = 1;
| ^~~~
koala.cpp: In function 'int greaterValue(int, int)':
koala.cpp:134:1: warning: control reaches end of non-void function [-Wreturn-type]
134 | }
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
344 KB |
Output is correct |
2 |
Correct |
4 ms |
344 KB |
Output is correct |
3 |
Correct |
3 ms |
344 KB |
Output is correct |
4 |
Correct |
3 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
344 KB |
Output is correct |
2 |
Correct |
11 ms |
596 KB |
Output is correct |
3 |
Correct |
12 ms |
344 KB |
Output is correct |
4 |
Correct |
10 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
41 ms |
476 KB |
Output is correct |
2 |
Partially correct |
51 ms |
468 KB |
Output is partially correct |
3 |
Correct |
40 ms |
468 KB |
Output is correct |
4 |
Correct |
43 ms |
464 KB |
Output is correct |
5 |
Partially correct |
42 ms |
488 KB |
Output is partially correct |
6 |
Correct |
40 ms |
472 KB |
Output is correct |
7 |
Partially correct |
41 ms |
480 KB |
Output is partially correct |
8 |
Correct |
41 ms |
480 KB |
Output is correct |
9 |
Correct |
40 ms |
468 KB |
Output is correct |
10 |
Correct |
41 ms |
468 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
17 ms |
344 KB |
Output is correct |
2 |
Correct |
26 ms |
452 KB |
Output is correct |
3 |
Correct |
32 ms |
344 KB |
Output is correct |
4 |
Correct |
30 ms |
344 KB |
Output is correct |
5 |
Correct |
24 ms |
344 KB |
Output is correct |
6 |
Correct |
26 ms |
344 KB |
Output is correct |
7 |
Correct |
25 ms |
344 KB |
Output is correct |
8 |
Correct |
25 ms |
344 KB |
Output is correct |
9 |
Correct |
25 ms |
344 KB |
Output is correct |
10 |
Correct |
24 ms |
436 KB |
Output is correct |
11 |
Correct |
25 ms |
444 KB |
Output is correct |
12 |
Correct |
15 ms |
344 KB |
Output is correct |
13 |
Correct |
25 ms |
344 KB |
Output is correct |
14 |
Correct |
24 ms |
344 KB |
Output is correct |
15 |
Correct |
23 ms |
452 KB |
Output is correct |
16 |
Correct |
23 ms |
452 KB |
Output is correct |
17 |
Correct |
21 ms |
344 KB |
Output is correct |
18 |
Correct |
22 ms |
456 KB |
Output is correct |
19 |
Correct |
22 ms |
460 KB |
Output is correct |
20 |
Correct |
32 ms |
504 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Partially correct |
18 ms |
344 KB |
Output is partially correct |
2 |
Partially correct |
17 ms |
600 KB |
Output is partially correct |
3 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
4 |
Partially correct |
18 ms |
344 KB |
Output is partially correct |
5 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
6 |
Partially correct |
19 ms |
600 KB |
Output is partially correct |
7 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
8 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
9 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
10 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
11 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
12 |
Partially correct |
16 ms |
344 KB |
Output is partially correct |
13 |
Partially correct |
17 ms |
460 KB |
Output is partially correct |
14 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
15 |
Partially correct |
17 ms |
456 KB |
Output is partially correct |
16 |
Partially correct |
21 ms |
344 KB |
Output is partially correct |
17 |
Partially correct |
18 ms |
344 KB |
Output is partially correct |
18 |
Partially correct |
17 ms |
460 KB |
Output is partially correct |
19 |
Partially correct |
18 ms |
344 KB |
Output is partially correct |
20 |
Partially correct |
18 ms |
460 KB |
Output is partially correct |
21 |
Partially correct |
17 ms |
456 KB |
Output is partially correct |
22 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
23 |
Partially correct |
18 ms |
344 KB |
Output is partially correct |
24 |
Partially correct |
19 ms |
452 KB |
Output is partially correct |
25 |
Partially correct |
16 ms |
452 KB |
Output is partially correct |
26 |
Partially correct |
19 ms |
344 KB |
Output is partially correct |
27 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
28 |
Partially correct |
17 ms |
432 KB |
Output is partially correct |
29 |
Partially correct |
18 ms |
344 KB |
Output is partially correct |
30 |
Partially correct |
19 ms |
428 KB |
Output is partially correct |
31 |
Partially correct |
18 ms |
344 KB |
Output is partially correct |
32 |
Partially correct |
18 ms |
344 KB |
Output is partially correct |
33 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
34 |
Partially correct |
18 ms |
344 KB |
Output is partially correct |
35 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
36 |
Partially correct |
17 ms |
596 KB |
Output is partially correct |
37 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
38 |
Partially correct |
17 ms |
344 KB |
Output is partially correct |
39 |
Partially correct |
18 ms |
596 KB |
Output is partially correct |
40 |
Partially correct |
16 ms |
344 KB |
Output is partially correct |