CF36D New Game with a Chess Piece

巴什博弈好题。

如果没有跳 (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) 的情况说白了也是如此。

原文地址:https://www.cnblogs.com/May-2nd/p/14793417.html