小明的游戏2 python 蓝桥杯 异或

小明的游戏2 python 蓝桥杯 异或

2022.04.08
再python中,一定不能用关键词作为变量名
在做这道题时,把sum做为变量名,怎么改都是错误的。
小明的游戏2 python 蓝桥杯 异或_第1张图片证明:
1.当所有堆的石子数均为1时:

  • 1.1 石子异或和为0,即有偶数堆。此时显然先手必胜。
  • 1.2 异或和不为0,奇数堆。此时显然先手必败。

2.当有一堆的石子数时,显然石子异或和不为0

  • 一定存在操作方法使得通过对大于 的石子堆操作将局面转化为 1.2 先手必败, 因此当前局
    面为先手必胜

3.当有两堆及以上的石子数>1时

  • 3.1 石子堆异或和不为 0,根据nim游戏的证明,可以得到总有一种方法转化nim和不为0状态,也就是转为 3.2状态。
  • 3.2 石子堆异或和为0, 当石子堆 的堆数 大于 时候可以转向 3.1状态,否则则可以转向
    2状态(必胜态)。

观察3我们可以发现, 3.2 状态起手可以转化成 3.1,而且3.1只能变成3.2或者先手必胜态,因此3.2位先手必胜状态。

# Ac
t = int(input())
while t:
    t -= 1
    n = int(input())
    sum1 = 0 # sum 是python中的关键词,不能用作变量名
    ok = 0
    list1 = list(map(int, input().split()))
    for i in range(n):
        if list1[i] > 1:
            ok = 1
        sum1 ^= list1[i]
    if ok == 0:
        if sum1 == 0:
            print('NO')
        else:
            print('YES')
       
    else:
        if sum1 == 0:
            print('YES')
        else:
            print('NO')
        

小明的游戏2 python 蓝桥杯 异或_第2张图片

你可能感兴趣的:(蓝桥杯省赛,蓝桥杯,python)