P13587 [NWRRC 2023] Game of Nim
题目描述
Georgiy 和 Gennady 在学习了经典的 Nim 游戏后,发明了一个新游戏。这个游戏用 $n$ 个石子进行,分为两个阶段。
在准备阶段,Georgiy 选择一个正整数 $p < n$,并在游戏场上放置一堆 $p$ 个石子。
之后,Gennady 用剩下的 $(n - p)$ 个石子,任意分成若干堆,每堆的石子数也可以任意。
例如,如果 $n = 10$ 且 $p = 2$,Gennady 可以分成:
- $8$ 堆,每堆 $1$ 个石子,
- 或 $1$ 堆 $5$ 个石子和 $1$ 堆 $3$ 个石子,
- 或 $2$ 堆 $2$ 个石子和 $4$ 堆 $1$ 个石子,
- 或 $1$ 堆 $8$ 个石子,
- 等等。
准备阶段结束后,进入 Nim 阶段。此时按照 Nim 游戏规则进行。两位玩家轮流操作,从 Georgiy 开始。每次操作,玩家必须从某一堆中取走至少一个石子,可以取任意多个,但只能从同一堆取。取走最后一个石子的玩家赢得 Nim 游戏,也就赢得整个游戏。
现在游戏刚开始,正处于准备阶段的中间:Georgiy 已经放好了 $p$ 个石子的一堆,但 Gennady 还没有把剩下的 $(n - p)$ 个石子分堆。现在 Gennady 想知道自己获胜的机会有多少。
请你计算,Gennady 有多少种方式将 $(n - p)$ 个石子分成若干堆,使得他能够赢得游戏(假设双方都会最优地进行 Nim 游戏)。
你可能知道,根据 Sprague-Grundy 理论,只有当所有堆的石子数(包括 $p$ 个石子的那一堆和 Gennady 分出的所有堆)的按位异或(XOR)结果为 $0$ 时,Gennady 才能获胜。
由于答案可能很大,请你输出答案对 $m$ 取模的结果。两种分法被认为不同,当且仅当对应的石子堆大小的多重集不同——也就是说,堆的顺序无关紧要。
输入格式
一行,包含三个整数 $n$、$p$ 和 $m$,分别表示游戏中的石子总数、Georgiy 选择的那一堆的石子数,以及取模的值($1 \le p < n \le 500$,$2 \le m \le 10^9$)。
输出格式
输出一个整数,表示 Gennady 能够将剩下的 $(n - p)$ 个石子分堆并最终获胜的方案数,对 $m$ 取模。
说明/提示
在第一个样例中,Gennady 获胜的两种分法分别是:
- 一堆 $3$ 个石子和两堆 $1$ 个石子,
- 或一堆 $2$ 个石子和三堆 $1$ 个石子。
在第二个样例中,无论 Gennady 如何分配剩下的 $3$ 个石子,他都必输。
由 ChatGPT 4.1 翻译