博弈论部分:

nn堆石子,第ii堆有aia_i个,每次可以选择一堆石子取走若干个(不能不取),然后选择不动或者将这堆石子剩余部分与另外一堆石子个数大于0的石子合并,问先手是否存在必胜策略。

solution :

(1)首先,当堆数为11时,显然先手必胜。

(2)当有偶数堆时

<1> 可以选择将偶数堆变为奇数堆

<2> 当 (a11) xor (a21) xor...xor (an1)=0(a_1-1) \ xor \ (a_2-1)\ xor...xor\ (a_n-1)=0 时,经过一系列步骤在石子堆数变为奇数堆时后手,反之若异或和不为0,可以先/后手。

(3)当有奇数堆(堆数>2)时,先手可以将堆数变为偶数,且使 (a11) xor (a21) xor...xor (an11)=0(a_1-1) \ xor \ (a_2-1)\ xor...xor\ (a_{n-1}-1)=0

下面给出(3)的证明:

假设当前有(a11) xor (a21) xor...xor (an1)=k(a_1-1) \ xor \ (a_2-1)\ xor...xor\ (a_{n}-1)=k

我们希望将某个aia_i拿取一部分并进行调整,某个aj1a_j-1变为(aj1) xor (ai1) xor k(a_j-1)\ xor\ (a_i-1)\ xor\ k,且有(aj1) xor k>aj1(a_j-1)\ xor\ k>a_j-1(aj1) xor k(aj1)ai1(a_j-1)\ xor\ k-(a_j-1)\le a_i-1

为了方便,接下来的讨论默认每个aia_i减一

针对题解的取石子堆数的最大值操作,给出反例

26 25 22 17 3
假设我们对26这一堆进行操作
每个石子堆均-1可得:
25 24 21 16 2
我们可以将[0,25]个石子放到某一堆上
观察到24^21^16^2=31
24^31=7
21^31=10
16^31=15
2^31=29
所以只能将[0,25]个石子加到2这一堆
但是2+25<29所以不能将异或和变为0

我们假设kk的第tt位(最高位)为1,则一定存在至少1个aia_i的第t位为1,我们选出某个第tt位为1的aia_i,此时 k xor aik\ xor\ a_i的第t位为0。

<1>若ai xor k=0a_i\ xor\ k=0,则直接全部取空即可。

<2>若aia_i的前t1t-1位不都为0,则ai xor ka_i\ xor\ k的最高位在前t1t-1位(假设为第ss位,aia_i的第ss位也为1)出现,则此时剩余的石子堆数有奇数堆第ss位为1。

  • 若第t位为1的堆数均在前面所述的奇数堆出现(偶数次),则存在第ss位为0且第tt位为0的石子堆jjaj xor ai xor k>aja_j\ xor\ a_i\ xor\ k> a_j,因为aia_i的第tt位为1,所以有aj xor ai xor kajaia_j\ xor\ a_i\ xor\ k- a_j\le a_i

  • 若第t为为1的堆数不都出现在前面所述的奇数堆,则存在第ss位为0且第tt位为1的石子堆jjaj xor ai xor k>aja_j\ xor\ a_i\ xor\ k> a_j,显然此时aj xor ai xor kajaia_j\ xor\ a_i\ xor\ k- a_j\le a_i

<3>若aia_i的前t1t-1位都为0,则剩下的石子堆里若 aj xor ai xor k>aja_j\ xor\ a_i\ xor\ k> a_j,该石子堆可以调整至 aj xor ai xor ka_j\ xor\ a_i\ xor\ k,这是因为aia_i的第tt位为1,而aja_jtt为0时,aj xor ai xor ka_j\ xor\ a_i\ xor\ ktt位也为0,aja_jtt位为1时,aj xor ai xor ka_j\ xor\ a_i\ xor\ ktt位也为1,怎么调整石子都是够的。

  • 因此只需证明j,aj xor ai xor k>aj\exist j,a_j\ xor\ a_i\ xor\ k> a_j,假设ai xor ka_i\ xor\ k最高的为1的位为第rr位(一定存在),所以该位为1的有奇数堆,因为总共有偶数堆,则存在某个堆的石子个数第rr位为0,得证。

综上所述,当石子堆数为偶数且(a11) xor (a21) xor...xor (an1)=0(a_1-1) \ xor \ (a_2-1)\ xor...xor\ (a_n-1)=0时先手必败,否则先手必胜。