MIN-MEX Cut (Codeforces 1566B)
Tags: Greedy, bitmasks

A binary string is a string that consists of characters $$$0$$$ and $$$1$$$.Let $$$\operatorname{MEX}$$$ of a binary string be the smallest digit among $$$0$$$, $$$1$$$, or $$$2$$$ that does not occur in the string. For example, $$$\operatorname{MEX}$$$ of $$$001011$$$ is $$$2$$$, because $$$0$$$ and $$$1$$$ occur in the string at least once, $$$\operatorname{MEX}$$$ of $$$1111$$$ is $$$0$$$, because $$$0$$$ and $$$2$$$ do not occur in the string and $$$0 < 2$$$.A binary string $$$s$$$ is given. You should cut it into any number of substrings such that each character is in exactly one substring. It is possible to cut the string into a single substring — the whole string.A string $$$a$$$ is a substring of a string $$$b$$$ if $$$a$$$ can be obtained from $$$b$$$ by deletion of several (possibly, zero or all) characters from the beginning and several (possibly, zero or all) characters from the end.What is the minimal sum of $$$\operatorname{MEX}$$$ of all substrings pieces can be?

Input: The input consists of multiple test cases. The first line contains a single integer $$$t$$$ ($$$1 \le t \le 10^4$$$) — the number of test cases. Description of the test cases follows.Each test case contains a single binary string $$$s$$$ ($$$1 \le |s| \le 10^5$$$).It's guaranteed that the sum of lengths of $$$s$$$ over all test cases does not exceed $$$10^5$$$.

Output: For each test case print a single integer — the minimal sum of $$$\operatorname{MEX}$$$ of all substrings that it is possible to get by cutting $$$s$$$ optimally.

Note: In the first test case the minimal sum is $$$\operatorname{MEX}(0) + \operatorname{MEX}(1) = 1 + 0 = 1$$$.In the second test case the minimal sum is $$$\operatorname{MEX}(1111) = 0$$$.In the third test case the minimal sum is $$$\operatorname{MEX}(01100) = 2$$$.

Sample Inputs:
6
01
1111
01100
101
0000
01010

Sample Outputs:
1
0
2
1
1
2

Solution (Python):
for s in [*open(0)][1:]:
    print(min(2, sum((t > '/' for t in s.split('1')))))

Solution (Python):
class Solution:

    def __init__(self):
        pass

    def solve(self):
        t = int(input())
        result = []
        for i in range(t):
            arr = input()
            n = len(arr)
            count0 = 0
            mex = 0
            j = 0
            start = False
            while j < n:
                if arr[j] == '0':
                    start = True
                elif arr[j] == '1' and start:
                    start = False
                    count0 += 1
                j += 1
            if start:
                count0 += 1
            if count0 == 0:
                mex = 0
            elif count0 == 1:
                mex = 1
            else:
                mex = 2
            result.append(mex)
        for x in result:
            print(x)
if __name__ == '__main__':
    sol = Solution()
    sol.solve()

Solution (Python):
for s in [*open(0)][1:]:
    print(min(2, sum((t > '/' for t in s.split('1')))))