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

浙公网安备 33010602011771号