目录
1.小明的游戏1(尼姆博弈)
题目描述
蓝桥公司给他们的员工准备了丰厚的奖金,公司主管小明并不希望发太多的奖金,他想把奖金留给智慧的人,于是他决定跟每一个员工玩一个游戏,规则如下:
- 桌面上一共有 n 堆一元钱。
- 双方轮流行动,由小明先行动,每次行动从某一堆钱中拿走若干元(至少一元钱),取走最后一元钱的人获胜。
请问员工们能拿到奖金吗?
输入描述
第一行为一个整数 T,表示测试数据数量。
每个测试用例包含俩行。第一行为一个整数 n , 第二行包括 n 个整数 a1,a2...an 表示第 i 堆有 ai 元。
1≤T,n≤10^5,1≤ai≤10^9 。
保证所有测试用例的 n 的和不超过 2×10^5。
输出描述
如果员工能拿到奖金输出
YES
, 否则输出NO
。输入输出样例
示例 1
输入
3 2 1 1 1 1 3 2 2 1
输出
YES NO NO
定理:
- 若 a1⊕a2⊕⋯⊕an!=0,先手必胜,记此时的状态为N-position
- 若 a1⊕a2⊕⋯⊕an=0,先手必败,记此时的状态为P-position
(⊕ 表示异或运算)
T = int(input())
while T > 0:
n = int(input())
ans = 0
a = list(map(int, input().split()))
for i in range(n):
ans ^= a[i]
if ans!=0:
print('NO')
else:
print('Yes')
print()
T-=1
2.小明的游戏5( 威佐夫游戏)
题目描述