题解 CF1972B Coin Games
cjh20090318 · · 题解
赛时降智写了个链表暴力模拟,在小数据范围下还能过。
显然这种解法不够优美,所以还是讲正解。
题意
桌子上有
在每次操作中,玩家选择一枚正面朝上的硬币,取出硬币并翻转与其相邻的两枚硬币。如果(操作前)只剩下两枚硬币,则取出一枚,另一枚不翻转(因为会翻转两次)。如果(操作前)只剩下一枚硬币,则不会翻转任何硬币。如果(操作前)没有正面朝上的硬币,玩家就输了。
两人做的都是最优决策,请问先手是否会获胜。
分析
分情况讨论。
- 硬币周围有两个
U时,此次操作会减少3 个U。 - 硬币周围有一个
U和一个D时,此次操作会减少1 个U。 - 硬币周围有两个
D时,此次操作会增加1 个U。
观察到 U 个数的奇偶性是持续变化的,因为 U 的个数为 U 的个数为奇数。
代码
T = int(input())
for _ in range(T):
int(input())
print('YES' if input().count('U')%2 else 'NO') # U 的个数是否为奇数。