我参加了一个关于codeforces的DIV2竞赛,但是无法解决这个问题。
我理解最重要的一位意味着什么,但是它在解决方案中的使用方式让我感到困惑。 我只是需要帮助解决方案背后的逻辑。
如有任何帮助,我们将不胜感激。
所以首先,让我们了解一下到底是什么赢得了这场比赛。
因为到了最后,他们会比较分数,分数高的一方获胜,所以唯一重要的是每个人的分数中最重要的部分。
因为获得分数的方法是从给定的数组中获取数字,所以唯一重要的是数组中每个数字的最高有效位。 只有两个玩家从最重要的位得到相同的分数,你需要测试下一位。
设x是数字的最高有效位中的1的个数,y是0的个数:
如果x为偶数,无论玩家做出什么决定,双方都将以相同的分数结束,因此进入下一个位(如果不存在,游戏将以平局结束)。 实际上,由于x是偶数,两个玩家的结果的平价是相同的。
为了使问题简单,我将假设数组中包含的所有数字要么是1,要么是0。 假设数组中有4个数字,[1,1,1,1]。 如果两个玩家都必须进行两次异或1。 因此它们都得到(0 xor 1)xor 1=0。
事实上,只要1的数字是偶数,它们总是会打成平手,因为它们都将异或相同的1。 另一方面,异或0不会改变它们的得分。
所以我们可以得到:x mod2=0给出tie
现在让我们想想玩家1会如何输赢。 最简单的情况是,如果有[1,(0)...],或者只有一个1,无论0是多少,玩家1获胜。
这里我们可以得到如果x=1,p1获胜
那你怎么能让1号玩家输呢? 只要阵中有一个1,玩家1就可以拿走它。 所以要让他输,玩家1要再拿1,玩家2也要拿1。 也就是说,你至少需要三个1才能让玩家1输。
这里我们可以得到如果x=3,p1可能会丢失
但是你怎么保证玩家1会拿走那额外的1呢? 我们要确保1号球员是最后一个被选中的球员,所以他别无选择,只能被选中。 要做到这一点,我们将有偶数0。 通过这样做,p2总是可以复制p1所做的,除了额外的1。
假设我们有[1,1,1,0,0]。 则它们将执行:
P1:1,0,1
P2:1,0,
 ;或:
P1:0,1,1
P2:0,1,
现在我们可以得到如果x=3,y mod2=0,p1丢失
现在让我们看看是否可以推广这部分,假设我们有x=5。 现在,不管p2怎么做,p1总是能保证1的奇数,所以他总是会赢。
类似地,如果我们有x=7,我们将有一个与x=3相同的情况。 如果我们有0的偶数,p2总能使p1得到1的偶数。
现在我们得到:
如果x mod2=0,则它们并列
如果x mod 4=1,则p1获胜,且
如果x mod 4=3,y mod 2=1,则p1获胜,且
如果x mod 4=3,y mod 2=0,则p1丢失,这基本上是解的结果。