题目
有 (n) 堆石子,已知每堆石子的数量都介于 ([1,2^m-1]) 之间且互不相同。每堆石子中的数量可以任选(但必须满足上述要求),求有多少种方案可以使得 ( ext{Nim}) 游戏下先手取胜。
答案模 (1e9+7)。
(nle1e7)。
解法
算后手必胜的情况。
如果不要求互不相同也不要求非 (0),那么答案显然就是前面的任选,最后一个是前面的异或和。
如果要求非 (0),设 (f(i)) 表示 (i) 堆石子的答案,那么显然有 (f(i)=(2^m-1)^{i-1}-f(i-1)),即前面 (i-1) 位任选减掉最后一位恰好是 (0) 的答案(前 (i-1) 位异或和为 (0),要使前 (i) 位异或和为 (0),第 (i) 位只能是 (0))。
如果再加上互不相同的限制,仍然前面 (i-1) 位任选,减掉第 (i) 位为 (0) 的情况以及第 (i) 位和之前某位相等的情况即可(由于前面互不相同,因此只有一个位置与其相等)。
[f(i)=(2^m-1)(2^m-2)…(2^m-i+1)-f(i-1)-(2^m-1)(i-1)f(i-2)
]
最后 ((2^m-1)(2^m-2)…(2^m-n)-f(n)) 即为答案。
复杂度 (mathcal O(n))。