2 条题解

  • 0
    @ 2024-10-21 0:45:42

    ys的01串

    题意描述

    ys手中有两个个长度为 nn0101 串,ys想让这两个 0101 串相等,现在 ysys 赐予你一种能力。

    在一次操作之中,你可以选择 0101 串的任意前缀,使其字母颠倒(00 变成 11 , 11 变成 00)。

    问你能否让两个字符串相等。

    思路

    本题难度在本场比赛之中较大

    题意简单描述就是给了两个 0101 串,我们可以对第一个串进行操作。

    操作的步骤是,你选择任意长度的前缀,需要满足这个前缀内字符 0011 的数量是相同的,之后将 00 全部变成 1111 全部变成 00

    因此经过一段推理可以得到一些简单的结论。

    若第一个字符串中 11 的个数不等于第二个字符串中 11 的个数,则一定不能转化。

    之后可以判断每个不相同的字符满不满足前面的(包括自身) 11 的个数等于 00 的个数。

    代码实现的难度体现在两点。

    一是对于不相同字符串的判定。

    若是选择了一旦有不相同的字符串就进行判断前面两数的个数,这样子的话连样例都过不了,因为有些字符串是连在一起变化的。经过仔细观察应该能找出如何判断这些字符串是不是连在一起的,通过判断不相等的字符前一位来判断是不是一个串。若前面的字符相同,则这个字符就是串的开头(反向),则这个开头应该满足1的个数等于0的个数。

    二是不仅仅要判断A中1的个数和0的个数,还要判断B中1的个数和0的个数,只有两者都满足的时候才能往下进行。

    若没有考虑到这两点,或者仅仅考虑到1没有考虑到2。如下额外错误的数据会有输出YES的情况。

    10010101
    11000101
    

    信息

    ID
    1026
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    85
    已通过
    11
    上传者