一个异或游戏:
有N个不同的数ai,两名玩家轮流操作,每次操作中玩家需要选择一个数进行删除。
如果删除之后,剩下的数的异或是0,则该名玩家获胜。
你需要回答这场游戏最终谁会获胜。
设s=a[1]⨁a[2]⨁a[3]⨁...⨁a[n]
1、一步必胜的情况:∃i∈[1,N]s=a[i]
2、两步必胜的情况:∀(i,j)∈[1,N]s=a[i]⨁a[j]
res=a[k1]⨁...⨁a[k2]=0(k=(i,j))
由于玩家双方会采取最优策略,如果只存在一对(i,j)满足:取走a[i]后再取走a[j]会导致剩下的数的异或为0.
先手可以选择不取走a[i],而是取别的数a[k],这样不会破坏(i,j),也就无法在两步内获胜。
但是,我们是要求在两步内必胜,那么是否存在这样的必胜情况?
当∀i∈[1,N] 都有一个数j和它配对, 也就意味着我们能找出2N对这样的(i,j)时,是存在两步必胜的情况的。
但是,如果N是奇数,那么就不可能找出2N对这样的数,因为一定会有多余的数,所以如果按最优策略走的话,那么也就不能在两步内必胜。
那么该怎么赢???
当N是奇数,不管有多少对,设为k对,一定会剩下奇数个不满足配对的数,优先删掉这些数,因为它们有奇数个,当它们删完了之后,一定是轮到对面的回合,这样他只能开始删这 k组配对的数,也就意味着对面输了。
所以,N为奇数的时候,先手必胜。
3、三步必胜的情况:
假设存在t组(i,j,k)这样的三步必胜的数:
先手先删除a[i],则这一组数就变成了(j,k)这样的两步必胜的数。
后手不可能选择删(j,k)中的任意一个,只能删掉其他的非两步必胜的数。
最终一定是剩下t组(j,k)这样的两步必胜的数,因为剩下数的个数是偶数,代表着当前已经删除了N−2t个数。
如果N−2t是奇数,即N是奇数,说明下一步是后手开始下,后手只能删(j,k)这样的数,后手必输。
如果N−2t是偶数,即N是偶数,说明下一步是你下,你只能删除(j,k),你必输。
所以三步必胜的最终状态是等价于两步必胜。
结论也仍然是N为奇数的时候,先手必胜,N为偶数的时候,先手必败。
同理,k≥2的所有k步必胜的情况,都能归结于2步必胜,它们的结论是相同的:N为奇数,先手必胜,N为偶数,先手必败。
k=1,即1步必胜的情况,需要我们特判。