2 条题解

  • 2
    @ 2024-10-22 19:48:08

    题意

    给你两串由 '0''1' 构成的字符串 ab,你可以对 a 串进行操作,在一次操作之中,你可以选择 01 串前缀中01数量相等的前缀,使其字母颠倒(0 变成 1 , 1 变成 0)。

    现在你可以进行任意次操作,问你能否让 ab 两个字符串相等。

    思路

    因为可以进行任意次操作,所以只要选择的前缀01数量相同无论如何都可以转回来,所以重点就在01的数量是否相同。

    所以可以在从前都后进行遍历的时候计算前缀中01的数量,当遍历时遇到:

    (1)a[i]==b[i]&&a[i+1]!=b[i+1] (2)a[i]!=b[i]&&a[i+1]==b[i+1]

    上述两种情况就代表此时字符串 1~i 的前缀必须要进行一次翻转,则此时判断 a 串 1~i 的前缀中01个数是否相同,若不相同则代表不能翻转,则中止遍历,输出 NO,若相同就代表此时可以翻转,继续向后遍历,直到遍历结束输出 YES 或在遇到上述输出 NO 的条件的情况下中止遍历输出 NO

    • 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
      
      • 1

      信息

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