| Task: | Stone game |
| Sender: | aalto26am_003 |
| Submission time: | 2026-08-31 17:28:54 +0300 |
| Language: | C++ (C++20) |
| Status: | READY |
| Result: | TIME LIMIT EXCEEDED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.00 s | details |
| #3 | ACCEPTED | 0.00 s | details |
| #4 | ACCEPTED | 0.00 s | details |
| #5 | ACCEPTED | 0.00 s | details |
| #6 | ACCEPTED | 0.00 s | details |
| #7 | ACCEPTED | 0.00 s | details |
| #8 | ACCEPTED | 0.00 s | details |
| #9 | ACCEPTED | 0.00 s | details |
| #10 | ACCEPTED | 0.00 s | details |
| #11 | ACCEPTED | 0.00 s | details |
| #12 | ACCEPTED | 0.00 s | details |
| #13 | ACCEPTED | 0.00 s | details |
| #14 | ACCEPTED | 0.00 s | details |
| #15 | ACCEPTED | 0.00 s | details |
| #16 | ACCEPTED | 0.00 s | details |
| #17 | ACCEPTED | 0.00 s | details |
| #18 | ACCEPTED | 0.00 s | details |
| #19 | ACCEPTED | 0.00 s | details |
| #20 | ACCEPTED | 0.00 s | details |
| #21 | ACCEPTED | 0.04 s | details |
| #22 | ACCEPTED | 0.00 s | details |
| #23 | ACCEPTED | 0.00 s | details |
| #24 | ACCEPTED | 0.01 s | details |
| #25 | ACCEPTED | 0.05 s | details |
| #26 | ACCEPTED | 0.00 s | details |
| #27 | ACCEPTED | 0.04 s | details |
| #28 | ACCEPTED | 0.00 s | details |
| #29 | ACCEPTED | 0.02 s | details |
| #30 | ACCEPTED | 0.00 s | details |
| #31 | ACCEPTED | 0.36 s | details |
| #32 | ACCEPTED | 0.00 s | details |
| #33 | ACCEPTED | 0.00 s | details |
| #34 | ACCEPTED | 0.06 s | details |
| #35 | ACCEPTED | 0.49 s | details |
| #36 | ACCEPTED | 0.00 s | details |
| #37 | ACCEPTED | 0.33 s | details |
| #38 | ACCEPTED | 0.00 s | details |
| #39 | ACCEPTED | 0.14 s | details |
| #40 | ACCEPTED | 0.00 s | details |
| #41 | TIME LIMIT EXCEEDED | -- | details |
| #42 | ACCEPTED | 0.00 s | details |
| #43 | ACCEPTED | 0.00 s | details |
| #44 | ACCEPTED | 0.24 s | details |
| #45 | TIME LIMIT EXCEEDED | -- | details |
| #46 | ACCEPTED | 0.00 s | details |
| #47 | TIME LIMIT EXCEEDED | -- | details |
| #48 | ACCEPTED | 0.00 s | details |
| #49 | ACCEPTED | 0.54 s | details |
| #50 | ACCEPTED | 0.00 s | details |
| #51 | ACCEPTED | 0.02 s | details |
| #52 | ACCEPTED | 0.00 s | details |
| #53 | ACCEPTED | 0.00 s | details |
| #54 | ACCEPTED | 0.31 s | details |
| #55 | TIME LIMIT EXCEEDED | -- | details |
| #56 | ACCEPTED | 0.55 s | details |
| #57 | ACCEPTED | 0.00 s | details |
| #58 | ACCEPTED | 0.00 s | details |
| #59 | ACCEPTED | 0.09 s | details |
| #60 | ACCEPTED | 0.00 s | details |
Code
#include <algorithm>
#include <iostream>
#include <map>
std::map<std::pair<int, int>, int> memo;
// 2 = win, 1 = draw, 0 = loss;
#define UPDATE(opponent_result) local_best = std::max(2 - opponent_result, local_best); if (local_best == 2) {memo[inkey] = 2; return 2;};
// this is actually horrible
int stone_game(int a, int b) {
{
int tmp = a;
a = std::min(tmp, b);
b = std::max(tmp, b);
}
const std::pair<int, int> inkey = {a, b};
const auto it = memo.find(inkey);
if (it != memo.end()) {
return it->second;
}
memo[inkey] = 1;
if (a == b) {
memo[inkey] = 0;
return 0;
}
if (a == 0 || b == 0) {
memo[inkey] = 2;
return 2;
}
int local_best = 0;
for (int i = 1; i <= a; i++)
{
UPDATE(stone_game(a - i, b));
UPDATE(stone_game(a - i, b + i));
UPDATE(stone_game(a, b - i));
UPDATE(stone_game(a + i, b - i));
}
for (int i = a + 1; i <= b; i++)
{
UPDATE(stone_game(a, b - i));
UPDATE(stone_game(a + i, b - i));
}
memo[inkey] = local_best;
return local_best;
}
int main() {
int a, b;
std::cin >> a;
std::cin >> b;
// can take any n of stones from either pile and either move them onto other
// pile or discard. first player that cannot make moves (i.e., both piles
// empty) loses winner is one whose move empties the last pile alternatively,
// lose the game if you empty the first pile from below, also seen that winner
// is one who gets pile to 1 1 unsure how this could ever be a draw
// 1 2
// uolevi can make it 1 1 or 2 1; 2 1 -> 1 2 will go on forever, so 1 1
// 1 1
// maija will always empty one pile
// 0 1 or 1 0, and then uolevi can discard the last stone -> win
// starting at 1 1 -> as if maija got it to 1 1 -> maija wins
// starting at 2 2 -> zeroing = loss for uolevi
// -> making either one 1 = loss for uolevi because maija can then force 1 1
// -> 0 1 -> 0 0
// win if your move makes a and b equal
// starting at 1 n -> uolevi can make 1 1 -> win
// starting at m n -> (m-1), (n-1)
// 3 3
// 1 3, 1 5, 2 3, 2 4
int result = stone_game(a,b);
switch (result)
{
case 0:
std::cout << "Maija";
break;
case 1:
std::cout << "Draw";
break;
case 2:
std::cout << "Uolevi";
break;
}
return 0;
}Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 3 4 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 5 5 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 1 1 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 1 4 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 5 3 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 1 1 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 5 2 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 8
Verdict: ACCEPTED
| input |
|---|
| 2 2 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 9
Verdict: ACCEPTED
| input |
|---|
| 1 5 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 10
Verdict: ACCEPTED
| input |
|---|
| 2 2 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 6 8 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 12
Verdict: ACCEPTED
| input |
|---|
| 10 10 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 13
Verdict: ACCEPTED
| input |
|---|
| 2 2 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 14
Verdict: ACCEPTED
| input |
|---|
| 1 8 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 15
Verdict: ACCEPTED
| input |
|---|
| 10 6 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 16
Verdict: ACCEPTED
| input |
|---|
| 1 1 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 17
Verdict: ACCEPTED
| input |
|---|
| 10 4 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 18
Verdict: ACCEPTED
| input |
|---|
| 3 3 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 19
Verdict: ACCEPTED
| input |
|---|
| 1 10 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 20
Verdict: ACCEPTED
| input |
|---|
| 4 4 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 21
Verdict: ACCEPTED
| input |
|---|
| 60 72 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 22
Verdict: ACCEPTED
| input |
|---|
| 100 100 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 23
Verdict: ACCEPTED
| input |
|---|
| 19 19 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 24
Verdict: ACCEPTED
| input |
|---|
| 8 71 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 25
Verdict: ACCEPTED
| input |
|---|
| 91 55 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 26
Verdict: ACCEPTED
| input |
|---|
| 6 6 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 27
Verdict: ACCEPTED
| input |
|---|
| 95 34 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 28
Verdict: ACCEPTED
| input |
|---|
| 23 23 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 29
Verdict: ACCEPTED
| input |
|---|
| 2 97 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 30
Verdict: ACCEPTED
| input |
|---|
| 37 37 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 31
Verdict: ACCEPTED
| input |
|---|
| 119 144 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 32
Verdict: ACCEPTED
| input |
|---|
| 200 200 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 33
Verdict: ACCEPTED
| input |
|---|
| 38 38 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 34
Verdict: ACCEPTED
| input |
|---|
| 15 142 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 35
Verdict: ACCEPTED
| input |
|---|
| 181 110 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 36
Verdict: ACCEPTED
| input |
|---|
| 12 12 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 37
Verdict: ACCEPTED
| input |
|---|
| 190 67 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 38
Verdict: ACCEPTED
| input |
|---|
| 46 46 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 39
Verdict: ACCEPTED
| input |
|---|
| 3 194 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 40
Verdict: ACCEPTED
| input |
|---|
| 73 73 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 41
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 178 215 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| (empty) |
Test 42
Verdict: ACCEPTED
| input |
|---|
| 300 300 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 43
Verdict: ACCEPTED
| input |
|---|
| 56 56 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 44
Verdict: ACCEPTED
| input |
|---|
| 22 213 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 45
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 271 165 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| (empty) |
Test 46
Verdict: ACCEPTED
| input |
|---|
| 17 17 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 47
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 285 100 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| (empty) |
Test 48
Verdict: ACCEPTED
| input |
|---|
| 69 69 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 49
Verdict: ACCEPTED
| input |
|---|
| 4 291 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 50
Verdict: ACCEPTED
| input |
|---|
| 110 110 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 51
Verdict: ACCEPTED
| input |
|---|
| 90 7 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 52
Verdict: ACCEPTED
| input |
|---|
| 21 21 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 53
Verdict: ACCEPTED
| input |
|---|
| 134 134 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 54
Verdict: ACCEPTED
| input |
|---|
| 183 72 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 55
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 277 232 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| (empty) |
Test 56
Verdict: ACCEPTED
| input |
|---|
| 245 54 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 57
Verdict: ACCEPTED
| input |
|---|
| 98 98 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 58
Verdict: ACCEPTED
| input |
|---|
| 55 55 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
Test 59
Verdict: ACCEPTED
| input |
|---|
| 23 152 |
| correct output |
|---|
| Uolevi |
| user output |
|---|
| Uolevi |
Test 60
Verdict: ACCEPTED
| input |
|---|
| 130 130 |
| correct output |
|---|
| Maija |
| user output |
|---|
| Maija |
