damn_T_T's blog

By damn_T_T, history, 4 weeks ago, In English,

Can anyone help me with this problem?

I have learnt sprague grundy numbers recently.

 
 
 
 
  • Vote: I like it
  • -7
  • Vote: I do not like it

»
4 weeks ago, # |
Rev. 5   Vote: I like it +14 Vote: I do not like it

First, to use NIM game technique you need independent games. You can think of the game as moving coins from i to 2*i, 3*i or 5*i. And each coins is independent from the rest.

Now, you just need to find the grundy number associated with each coin. To do this you can build an graph. Where each position of the array is a node, and an edge represents to which positions you can move the coin. For example for a array of size 10:

In red is the grundy number. Basically if you can't go anywhere it is 0, otherwise is the smallest integer that you can't directly reach.

To solve the problem you can pre-calculate the grundy number for each position with the graph. Then do XOR for the grundy number of each coin.

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    "Then do XOR for the grundy number of each coin."

    for each coin or position?

    • »
      »
      »
      4 weeks ago, # ^ |
      Rev. 2   Vote: I like it 0 Vote: I do not like it

      For each coin.

      For example:

      0 3 0 1 2 0 0 0 0 0

      You have 3 coins in position 2, 1 coin in position 4 and 2 in position 5. So you should do:

      grundy(2) XOR grundy(2) XOR grundy(2) XOR grundy(4) XOR grundy (5) XOR grundy(5)

      Obs: Just remember that a XOR a = 0, so the above is equivalent to:

      grundy(2) XOR grundy(5)

      • »
        »
        »
        »
        4 weeks ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Can you please explain why ? If we are doing this we can just store in the array 0 1 0 1 0 0 0 0 0 0 and then grundy(2) xor grundy(4)