CF1458D Flip and Reverse
题目描述
给定一个只包含 $0$ 和 $1$ 的字符串 $s$。你可以进行如下操作:
1. 选择 $s$ 的一个非空连续子串,且该子串中 $0$ 和 $1$ 的数量相等;
2. 翻转该子串中的所有字符,即将所有 $0$ 变为 $1$,所有 $1$ 变为 $0$;
3. 反转该子串。
例如,考虑 $s = 00111011$,可以进行如下操作:
- 选择前六个字符作为操作的子串:**001110**11。注意该子串中 $0$ 和 $1$ 的数量相等,因此是合法的选择。选择子串 0、110 或整个字符串都不是合法选择。
- 翻转该子串中的所有字符:**110001**11。
- 反转该子串:**100011**11。
请你求出经过若干次(可以为零次)上述操作后,能够得到的字典序最小的字符串。
输入格式
第一行包含一个整数 $T$($1 \leq T \leq 5 \cdot 10^5$),表示测试用例的数量。接下来的 $T$ 行,每行包含一个非空字符串,表示每个测试用例的输入字符串 $s$。
所有字符串均由字符 $0$ 和 $1$ 组成,且所有字符串的总长度不超过 $5 \cdot 10^5$。
输出格式
对于每个测试用例,输出一行,表示经过若干次操作后能够得到的字典序最小的字符串。
说明/提示
在第一个测试用例中,应对整个字符串进行一次操作。
在第二个测试用例中,需要进行两次操作:**011100**1,011**0110**。
在第三个测试用例中,无论进行多少次操作,字符串都不会发生变化。
由 ChatGPT 4.1 翻译