I can't solve this problem: http://www.spoj.com/HSPL09/problems/HS09NLG/
Can the problem somehow be reduced to NIM game?
I can't solve this problem: http://www.spoj.com/HSPL09/problems/HS09NLG/
Can the problem somehow be reduced to NIM game?
| # | User | Rating |
|---|---|---|
| 1 | Benq | 3792 |
| 2 | VivaciousAubergine | 3647 |
| 3 | jiangly | 3631 |
| 4 | Kevin114514 | 3574 |
| 5 | maroonrk | 3521 |
| 6 | strapple | 3515 |
| 7 | Radewoosh | 3461 |
| 8 | tourist | 3428 |
| 9 | turmax | 3378 |
| 10 | Um_nik | 3376 |
| # | User | Contrib. |
|---|---|---|
| 1 | Qingyu | 162 |
| 2 | adamant | 148 |
| 3 | Um_nik | 146 |
| 4 | Dominater069 | 143 |
| 5 | errorgorn | 141 |
| 6 | cry | 138 |
| 7 | Proof_by_QED | 136 |
| 8 | YuukiS | 135 |
| 9 | chromate00 | 134 |
| 10 | soullless | 133 |
| Name |
|---|



Yes, you can use Sprague–Grundy theorem. To find the grundy numbers, you may use dp such as: dp(i, j) — grundy number for a stack with i stones and having taken j stones from this stack in the previous round. You may use j as 0 in the initial call, where you can take every but one stone from the stack. Then, you may precompute them in an array g[i] from 1 to 300 by calling g[i] = dp(i, 0). For a query, just xor the precomputed values and check whether it is 0.