题解 CF1972B Coin Games

【洛谷专栏】

赛时降智写了个链表暴力模拟,在小数据范围下还能过。

显然这种解法不够优美,所以还是讲正解。

题意

桌子上有 \(n\) 枚硬币围成一个圆圈,每枚硬币要么朝上,要么朝下。两名玩家轮流操作。

在每次操作中,玩家选择一枚正面朝上的硬币,取出硬币并翻转与其相邻的两枚硬币。如果(操作前)只剩下两枚硬币,则取出一枚,另一枚不翻转(因为会翻转两次)。如果(操作前)只剩下一枚硬币,则不会翻转任何硬币。如果(操作前)没有正面朝上的硬币,玩家就输了。

两人做的都是最优决策,请问先手是否会获胜。

分析

分情况讨论。

  1. 硬币周围有两个 U 时,此次操作会减少 \(3\)U
  2. 硬币周围有一个 U 和一个 D 时,此次操作会减少 \(1\)U
  3. 硬币周围有两个 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 的个数是否为奇数。
posted @ 2025-02-09 19:49  Chen_Jinhui  阅读(25)  评论(0)    收藏  举报