$2|m$ 的时候是简单的:如果 $m+1|n$,那么对于先手的操作 $x$,后手可以操作 $m+1-x$,使得每次后手操作后的 $n$ 依旧为 $m+1$ 倍数,且一定有 $x\neq m+1-x$。反之先手可以操作一次使得 $m+1|n$。
接下来考虑 $2|m+1$ 的情况。
对于一个 $n$,有三种可能:
- 无论如何先手必败;
- 先手可以胜利,但是所有先手胜利的方案先手第一步都是 $x$(即如果上一步操作 $x$ 就先手必败了),称作 $x$ 胜利局面,特别的,如果 $n$ 是 $x$ 胜利的,那么对于任意一个 $y\neq x$ 称 $n$ 是非 $y$ 胜利的;
- 先手有两种第一步的策略使得胜利,所以无论如何先手必胜。
首先我们如果知道 $n$ 是一个必败局面,那么对于所有 $i\in[1,m]$,$n+i$ 要么是 $i$ 胜利局面,要么是必胜局面(这个结论很重要,下文中多次用到)。
考虑更大的,比如说 $n+m+1$,如果它不是必败的,那么 $n+m+2$ 就是必败的。
考虑是否存在 $i\in[1,m]$,$n+m+2-i$ 是必败的或 $i$ 胜利的:
- 显然这里面没有必败的;
- 对于 $i=1$,$n+m+1$ 不是 $1$ 胜利的,因为 $n+m$ 不是 $1$ 胜利的,也不是必败的。
- 对于 $i>1$,$n+m+2-i$ 如果是 $i$ 胜利的,那么它不是必胜的,所以它是 $m+2-i$ 胜利的,那么要求 $m+2-i=i$,$m$ 为奇数所以无解。
得证。所以我们得到一个结论:对于一个必败局面 $n$,大于它的最小必败局面是 $n+m+1$ 或者 $n+m+2$。
这就意味着,必败局面的总个数是 $O(V\log V)$ 的,也就是说我们可以求出所有的必败局面。最后询问答案 $(n,m)$ 时,只用二分判断考虑 $m$ 时 $n$ 是否为必败局面即可。
最后剩下的问题是判断 $n+m+1$ 是否必败。
设函数 $calc(n,ban)$,返回 $\text{true}$ 表示 $n$ 是必败的或 $ban$ 胜利的。
- 如果我们已经计算出 $n$ 是必败局面,直接返回 $\text{true}$。
- 如果 $n \leq m$,当 $n=m$ 时 $n$ 是 $m$ 胜利的,否则是必胜的。
- 对于 $i\in[1,m]$ 考虑 $n-i$。如果所有 $i\neq ban$ 有 $n-i$ 都是必胜的或者是非 $i$ 胜利的,那么函数就应返回 $\text{true}$。设 $A>B$ 为小于 $n$ 的最大的两个必败局面,依次考虑 $4\sim 7$:
- 显然 $n-i>A$ 不是必败的。如果 $n-i>A$ 是 $i$ 胜利的,那么它同时也应该是 $n-i-A$ 胜利的,所以唯一可能的 $i$ 是 $\dfrac{n-A}2$,如果它合法(为整数、$\leq m$、$\neq ban$),那么递归求解 $calc(n-\dfrac{n-A}2, \dfrac{n-A}2)$,如果递归返回 $\text{true}$,返回 $\text{false}$,否则继续执行;
- 显然 $n-i=A$ 是必败的;
- 显然 $A>n-i>B$ 不是必败的。如果 $n-i>B$ 是 $i$ 胜利的,那么按照上述分析应该递归计算 $calc(n-\dfrac{n-B}2, \dfrac{n-B}2)$。
- 否则返回 $\text{true}$。
但是!此处并不能直接套用上文中提到的那个重要结论,因为当 $A-B=m+2$ 的时候,对于 $A-1$,若其为 $x$ 胜利的,则 $x$ 的值不再是它与 $B$ 的差,而是 $\dfrac{m+1}2$。
所以最后还要考虑,如果 $A-B=m+2$ 且 $n-A+1 = \dfrac{m+1}2\neq ban$,应该返回 $\text{false}$。
复杂度我不太会分析。