CF2061F2.Kevin and Binary String (Hard Version)

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的困难版本。两个版本的区别在于此版本中字符串 $ t $ 由 '0'、'1' 和 '?' 组成。只有当您解决了该问题的所有版本后才能进行 hack。

Kevin 有一个长度为 $ n $ 的二进制字符串 $ s $。Kevin 可以执行以下操作:

  • 选择 $ s $ 中两个相邻的块并交换它们。

块是指由相同字符组成的最大子串$ ^{\text{∗}} $。形式化定义:设 $ s[l,r] $ 为子串 $ s_l s_{l+1} \ldots s_r 。当满足以下条件时,。当满足以下条件时, s[l,r] $ 构成一个块:

  1. $ l=1 $ 或 $ s_l \neq s_{l-1} $;
  2. $ s_l = s_{l+1} = \ldots = s_r $;
  3. $ r=n $ 或 $ s_r \neq s_{r+1} $。

相邻块是指两个块 $ s[l_1,r_1] $ 和 $ s[l_2,r_2] $ 满足 $ r_1 + 1 = l_2 $。

例如,若 $ s = \mathtt{000},\mathbf{11},\mathbf{00},\mathtt{111} $,Kevin 可以选择块 $ s[4,5] $ 和 $ s[6,7] $ 进行交换,将 $ s $ 变为 $ \mathtt{000},\mathbf{00},\mathbf{11},\mathtt{111} $。

给定一个由 '0'、'1' 和 '?' 组成且长度为 $ n $ 的字符串 $ t $,Kevin 希望确定使对于所有索引 $ i (( 1 \le i \le n $),若 $ t_i \neq $ '?' 则 $ s_i = t_i $ 所需的最小操作次数。若无法实现,输出 $ -1 $。

$ ^{\text{∗}} $ 若字符串 $ a $ 可通过从 $ b $ 的开头和结尾删除若干(可能为零或全部)字符得到,则称 $ a $ 是 $ b $ 的子串。

输入格式

每个测试包含多个测试用例。第一行包含测试用例数量 $ t (( 1 \le t \le 10^4 $)。接下来是测试用例描述。

每个测试用例的第一行包含一个由 '0' 和 '1' 组成的字符串 $ s $。

每个测试用例的第二行包含一个由 '0'、'1' 和 '?' 组成的字符串 $ t $。

保证 $ s $ 和 $ t $ 的长度相同。

保证所有测试用例的 $ s $ 长度之和不超过 $ 4 \cdot 10^5 $。

输出格式

对于每个测试用例,输出一个整数——所需的最小操作次数。若无法实现,输出 $ -1 $。

输入输出样例

  • 输入#1

    6
    0001100111
    0000011111
    010101
    111000
    0101
    0110
    0101
    1010
    011001
    001110
    0
    1

    输出#1

    1
    3
    1
    -1
    -1
    -1
  • 输入#2

    6
    010101
    ?0?0??
    0101
    ?0?0
    11100101
    ????????
    11100101
    ???11?1?
    1000100011
    ?11?000?0?
    10101
    ?1011

    输出#2

    2
    -1
    0
    2
    2
    -1

说明/提示

第一个示例的第一个测试用例的可能操作方式已在题目描述中展示。

第一个示例的第二个测试用例中,一种可能的操作方式为:

  1. 交换块 $ [2, 2] $ 和 $ [3, 3] ,, s $ 变为 $ \mathtt{001101} $;
  2. 交换块 $ [3, 4] $ 和 $ [5, 5] ,, s $ 变为 $ \mathtt{000111} $;
  3. 交换块 $ [1, 3] $ 和 $ [4, 6] ,, s $ 变为 $ \mathtt{111000} $。

第二个示例的第一个测试用例中,一种可能的操作方式为:

  1. 交换块 $ [1, 1] $ 和 $ [2, 2] ,, s $ 变为 $ \mathtt{100101} $;
  2. 交换块 $ [4, 4] $ 和 $ [5, 5] ,, s $ 变为 $ \mathtt{100011} $。

翻译由 DeepSeek R1 完成

输入解题思路,AI测评打分。不知道怎么写?

首页