CF1837C.Best Binary String

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Best Binary String

题目描述

给定一个由字符 0011 和/或 ?? 组成的字符串 ss,我们称其为一个模式串。

如果一个二进制字符串(即每个字符都是 0011)可以通过将模式串中的每个 ?? 独立替换为 0011,使得两个字符串完全相同,则称该二进制字符串与该模式串匹配。例如,00100010 匹配 ?01??01?,但 010010 不匹配 1??1??????????????

我们定义一个二进制字符串的代价为:将该字符串通过若干次“翻转任意连续子串”操作,使其变为非递减顺序(即所有 00 在前,所有 11 在后)所需的最少操作次数。

你需要在所有与给定模式串匹配的二进制字符串中,找到一个代价最小的字符串。如果有多个答案,输出任意一个即可。

输入格式

第一行包含一个整数 tt1t31041 \le t \le 3 \cdot 10^4),表示测试用例的数量。

接下来每个测试用例包含一行字符串 ss1s31051 \le |s| \le 3 \cdot 10^5),由字符 0011 和/或 ?? 组成。

所有测试用例中字符串长度之和不超过 31053 \cdot 10^5

输出格式

对于每个测试用例,输出一个与给定模式串匹配且代价最小的二进制字符串。如果有多个答案,输出任意一个即可。

说明/提示

在示例的第一个测试用例中,输出字符串的代价为 00

在第二个测试用例中,输出字符串的代价为 22:我们可以先翻转第 11 个到第 55 个字符的子串,得到 0010100101。然后再翻转第 33 个到第 44 个字符的子串,得到 0001100011,此时字符串已按非递减顺序排列。

由 ChatGPT 4.1 翻译

样例

4
??01?
10100
1??10?
0?1?10?10
00011
10100
111101
011110010

在线编程 IDE

建议全屏模式获得最佳体验