巴什博弈好题。
如果没有跳 (k) 格的操作,根据奇偶性就可以得到答案。
发现无论 (k) 是多少,用一次肯定扭转状态(相当于走了偶数次)。
那无非就是不用操作赢的人想将操作次数控制为偶数,不用操作输的人想将操作次数控制为奇数。
拿想改变状态的先手举例:
- 如果跳一次后对手不能跳了,就赢了。
- 如果各跳一次后自己不能跳了,就输了。
- 如果自己不跳对手跳循环两次后自己不能跳了,也输了。
- 如果自己不跳对手跳再自己跳对手不跳后自己不能跳了,也输了。
但问题是判断后手到底能不能跳。对于后两种情况,可以发现两次都是 (k+1)。
从这里我们可以归纳出一种策略,即对手跳,自己就不跳;对手不跳,自己就跳。
对于跳 (lfloorfrac{min{n-1,m-1}}{k+1} floor) 次能赢的人来说,他只要按这个策略操作,就可以获得胜利!
但其实有很多细节。
如果先手想要按这个策略操作,那他第一次到底是走还是跳呢?
- (min{n-1,m-1}mod(k+1)=0),第一次跳即可。
- (min{n-1,m-1}mod(k+1)>0),第一次走即可。
如果后手想要按这个策略操作,先手有机会扭转局势!
- (min{n-1,m-1}mod(k+1)=k),先手第一次跳。
但这样交上去会 WA,观察数据再随便找找可以发现 (k=1),(n=m=3) 的时候会输出 +
而答案是 0
。
设 (min{n-1,m-1}=d(k+1))。先手第一次跳后实行策略,接下来的 (d-1) 轮每轮和都是 (k+1)。最后剩下 (1),当 (k>1) 时先手是不能跳的,而 (k=1) 时可以。我们正是忽略了这个问题。
所以特判 (k=1) 即可。具体地:
- (n-1,m-1) 均是偶数。如果先手走,后手就在同一维走;如果先手跳,后手就跟着跳。先手必败。
- (n-1,m-1) 存在至少一个奇数。如果两个都是奇数,就跳,否则走奇数那一维,这样就变成上一种情况。先手必胜。
补充一个小疑点,为什么 (k>1) 较大的那一维的影响仅仅在于奇偶性?
考虑先手走了较大的那一维,如果后手再走那一维仍然不会改变大小关系,那么显然正确。如果改变了大小关系,那此时两维大小相等,同时小的那维没有改变,相当于扭转了先后手,同样正确。(k=1) 的情况说白了也是如此。