CF1566B.MIN-MEX Cut

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

MIN-MEX Cut

题目描述

一个二进制字符串是只包含字符 0011 的字符串。

定义二进制字符串的 MEX\operatorname{MEX} 为在 001122 中没有出现在字符串中的最小数字。例如,001011001011MEX\operatorname{MEX}22,因为 0011 都至少出现过一次;11111111MEX\operatorname{MEX}00,因为 0022 都没有出现过,且 0<20 < 2

给定一个二进制字符串 ss,你可以将其切分为任意数量的子串,使得每个字符恰好属于一个子串。你也可以选择不切分,即整个字符串作为一个子串。

如果字符串 aa 是字符串 bb 的子串,则 aa 可以通过从 bb 的开头和结尾删除若干(可能为零或全部)字符得到。

请问,将 ss 最优切分后,各个子串的 MEX\operatorname{MEX} 之和的最小值是多少?

输入格式

输入包含多组测试用例。第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。接下来每个测试用例包含一行二进制字符串 ss1s1051 \le |s| \le 10^5)。

保证所有测试用例中字符串 ss 的总长度不超过 10510^5

输出格式

对于每个测试用例,输出一个整数,表示将 ss 最优切分后,各个子串的 MEX\operatorname{MEX} 之和的最小值。

说明/提示

在第一个测试用例中,最小和为 $\operatorname{MEX}(0) + \operatorname{MEX}(1) = 1 + 0 = 1$。

在第二个测试用例中,最小和为 MEX(1111)=0\operatorname{MEX}(1111) = 0

在第三个测试用例中,最小和为 MEX(01100)=2\operatorname{MEX}(01100) = 2

由 ChatGPT 4.1 翻译

样例

6
01
1111
01100
101
0000
01010
1
0
2
1
1
2

在线编程 IDE

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