闲扯
好奇妙的一道计数题。
题面
Solution
我们知道 $Nim$ 游戏的先手必胜策略是所有数的异或非 $0$ 。
但是我们要计算非 $0$ 的方案数显然很困难,我们考虑算出所有为 $0$ 的方案数,然后用总方案数减去 $0$ 的方案数来得到我们合法的方案数。
我们设 $dp_i$ 表示放了前 $i$ 堆,所有数异或为 $0$ 的方案数。
因为我们只能选择 $[1,2^n-1]$ 中的数,所以我们有 $dp_0=1,dp_1=0$ 。
考虑转移。
我们可以让前 $i-1$ 个数任选,然后在第 $i$ 个数来进行调整,使得前 $i$ 个数的异或和为 $0$ 。
显然,前 $i-1$ 个数的异或结果有 $\prod_{i=1}^{i-1}2^n-i$ 种。
我们考虑容斥,减去不和法的情况来得到相应的方案数。
- 前 $i-1$ 个数的异或和刚好为 $0$ ,因为我们只能选择正整数,所以不能通过选 $0$ 来使前 $i$ 个数的异或和变为 $0$ 。这时的方案数为 $dp_{i-1}$ 。
- 因为我们还有一个限制:不能选择相同的元素,所以我们考虑在其中 $i-2$ 个数的异或和已经为 $0$ 的情况下,我们无论这 $i-1$ 个数中还剩哪一个,我们只能选择一个和它相同的数来使得异或和为 $0$ 。这显然是不合法的。这样做的方案数是 $dp_{i-2}\cdot(i-1)\cdot(2^n-i+1)$ 。( $2^n-i+1$ 是第 $i-1$ 个数能选择的值, $i-1$ 表示剩下的一个数可能放的位置)
然后最后容斥一下即可得到答案。
Code
1 |
|