文巾解题 810. 黑板异或游戏
1 題目描述
2 解題思路
·根據(jù)游戲規(guī)則,輪到某個玩家時,如果當(dāng)前黑板上所有數(shù)字異或結(jié)果等于 0,則當(dāng)前玩家獲勝。由于 Alice 是先手,因此如果初始時黑板上所有數(shù)字異或結(jié)果等于 0,則Alice 獲勝。
?
如果初始時黑板上所有數(shù)字異或結(jié)果不等于 0:
由于兩人交替擦除數(shù)字,且每次都恰好擦掉一個數(shù)字,因此對于這兩人中的任意一人,其每次在擦除數(shù)字前,黑板上剩余數(shù)字的個數(shù)的奇偶性一定都是相同的。
我們從數(shù)組nums 長度的奇偶性來討論,看看奇偶性和Alice的輸贏有沒有關(guān)系。
Alice 面臨失敗的狀態(tài)只有一種情況,即無論擦掉哪一個數(shù)字,剩余所有數(shù)字的異或結(jié)果都等于 0,下面證明這是不可能的
根據(jù)上述計算,可以得到?S=0,與這時候的假設(shè)?S≠0?矛盾
?
因此當(dāng)數(shù)組的長度是偶數(shù)時,先手Alice?總能找到一個數(shù)字,在擦掉這個數(shù)字之后剩余的所有數(shù)字異或結(jié)果不等于?0。
?
在 Alice 擦掉這個數(shù)字后,黑板上剩下奇數(shù)個數(shù)字,無論Bob 擦掉哪個數(shù)字,留給Alice 的一定是偶數(shù)個數(shù)字,此時Alice 要么獲勝,要么仍可以找到一個數(shù)字,在擦掉這個數(shù)字之后剩余的所有數(shù)字異或結(jié)果不等于0。因此當(dāng)Alice先手,且數(shù)組的長度是偶數(shù)的時候,Alice每輪至少不敗。當(dāng)黑板上數(shù)字異或之和為0,或者沒有數(shù)的時候,Alice贏。
同理可得,當(dāng)數(shù)組的長度是奇數(shù)時,Alice 在擦掉一個數(shù)字之后,留給 Bob 的一定是黑板上剩下偶數(shù)個數(shù)字,因此Bob 每輪至少不敗。當(dāng)黑板上數(shù)字異或之和為0,或者沒有數(shù)的時候,Bob贏。
?
綜上所述,當(dāng)且僅當(dāng)以下兩個條件至少滿足一個時,Alice 必勝:
數(shù)組 nums 的全部元素的異或結(jié)果等于 0;
數(shù)組nums 的長度是偶數(shù)。
?
分析完之后,代碼就很簡單了:
class Solution:def xorGame(self, nums: List[int]) -> bool:if(len(nums)%2==0):return Truesum=0for i in nums:sum=sum^iif(sum==0):return Truereturn False?
總結(jié)
以上是生活随笔為你收集整理的文巾解题 810. 黑板异或游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文巾解题 1035. 不相交的线
- 下一篇: 生成N个0~1的随机数,同时这些随机数的