
2022.04.08
再python中,一定不能用关键词作为变量名。
在做这道题时,把sum做为变量名,怎么改都是错误的。
证明:
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')
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)