B. Replacement (python解)-codeforces

B. Replacement (python解)-codeforces

原题链接:

B. Replacement

问题分析:

我们有两个二进制字符串:s(长度为 n)和 r(长度为 n-1)。根据游戏规则,我们需要在 s 上执行 n-1 次操作。在每次操作中,我们选择一个索引 k,使得 s[k]s[k+1] 不相同并将这两个字符替换为 r[i](第 i 次操作中 r 的第 i 个字符)。如果在某一步无法找到这样的 k,我们就输掉了游戏。目标是判断是否能成功完成所有 n-1 次操作。

思路:

  • 每次操作我们都需要将相邻的字符当中的一个改变为另一个字符。

    在可用的情况下,我们需要检查 s 中的 0 和 1 是否足够替换为 r 中的数据。

  • 由于需要找到相邻不同的字符,我们可以确保至少一个替换操作可以进行,这意味着我们需要在最终构建的 r 中的每一个字符能用 s 中的 0 和 1 进行合理替换。

  • 因此,我们需要在每次替换时要跟踪 10 的数量,以确保我们可以在 r 中按顺序找到这些字符。

  • 开始时获取 s10 的数量。

  • 对于r中的每个字符,检查是否可以合法进行替换:

    如果 1 的数量不足以替换 r[i](其中 r[i]1),则此时需要从 0 减去一个并确保 1 继续存在,反之亦然。

  • 如果在过程中任何时间点 10 的数量不足以保证替换,则最终输出 NO

  • 如果所有替换都能成功,输出 YES

代码:

for _ in range(int(input())):
    n = int(input())
    s = input()
    one = s.count("1")
    zero = s.count("0")
    ans = "YES"
    for ti in input():
        if one == 0 or zero == 0:
            ans = "NO"
            break
        one -= 1
        zero -= 1
        if ti == "1":
            one += 1
        else:
            zero += 1
    print(ans)
posted @ 2024-11-10 17:57  MPyGF  阅读(18)  评论(0编辑  收藏  举报