题意:有
堆石子,每堆有 个石子和一个常数
,两人轮流操作,每次可以从任意一堆(假设为第
堆)石子中取出至少一个至多 个。
不能操作者输。问是否先手必胜。
,,时限 。
这是经典的
和问题,求出每一堆的
函数然后异或即可。
对于一堆石子 ,其后继状态为
。
我们将
相同的一组状态一起研究。
对于状态 ,一步最多拿走的石子数目均为 。
显然状态
都是无法操作的,故 值为
。
打表不难看出 。
而 达到了后继状态总数,这说明
为 的排列。
考虑 ,其后继状态为
,其中
达到了后继状态数,无贡献。
其他部分 相当于 的排列去掉了 ,故有 。
进一步考虑 ,能发现是
的排列去掉了 ,故有
依次类推,则有 。
能写出如下递推公式:
进一步地, ,后继状态为 ,正是 的排列,于是 ,能归纳证明结论。
若根据上述公式直接计算
函数,复杂度较劣。
考虑在转移中将 相等的步骤一起做。
对 ,记 ,找出最大的 使得 次转移都是第三种情况。
即 ,则
。
这
次转移都是第三种情况,所以可以直接令 。
考虑复杂度,当 ,
本身就 。
当 , 只有 种不同取值。
综上,总杂度为 。