Skip to content

Commit abc2953

Browse files
Add files via upload
1 parent 47be068 commit abc2953

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include <cstdio>
2+
#include <vector>
3+
#include <set>
4+
5+
using namespace std;
6+
7+
int get_mex(set <int> &state_possible)
8+
{
9+
int i = 0;
10+
11+
while(true)
12+
{
13+
if(state_possible.count(i) == 0)
14+
return i;
15+
16+
i++;
17+
}
18+
}
19+
20+
void compute(vector <int> &grundy, vector <int> &fibonacci, int MAX_STONES)
21+
{
22+
grundy[0] = 0;
23+
24+
for(int i = 1; i <= MAX_STONES; i++)
25+
{
26+
set <int> state_possible;
27+
28+
for(int j = 0; fibonacci[j] <= i; j++)
29+
{
30+
state_possible.insert(grundy[i - fibonacci[j]]);
31+
}
32+
33+
grundy[i] = get_mex(state_possible);
34+
}
35+
}
36+
37+
int main()
38+
{
39+
vector <int> fibonacci(35);
40+
fibonacci[0] = fibonacci[1] = 1;
41+
for(int i = 2; i < 35; i++)
42+
{
43+
fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
44+
}
45+
46+
const int MAX_STONES = 3e6;
47+
vector <int> grundy(MAX_STONES);
48+
compute(grundy, fibonacci, MAX_STONES);
49+
50+
int no_of_piles;
51+
scanf("%d", &no_of_piles);
52+
53+
int nim_sum = 0;
54+
while(no_of_piles--)
55+
{
56+
int stones;
57+
scanf("%d", &stones);
58+
59+
nim_sum ^= grundy[stones];
60+
}
61+
62+
printf(nim_sum == 0 ? "Vinit\n" : "Ada\n");
63+
return 0;
64+
}

0 commit comments

Comments
 (0)