Make it Divisible by 25 (Codeforces 1593B)
Tags: Math, dfs and similar

It is given a positive integer $$$n$$$. In $$$1$$$ move, one can select any single digit and remove it (i.e. one selects some position in the number and removes the digit located at this position). The operation cannot be performed if only one digit remains. If the resulting number contains leading zeroes, they are automatically removed.E.g. if one removes from the number $$$32925$$$ the $$$3$$$-rd digit, the resulting number will be $$$3225$$$. If one removes from the number $$$20099050$$$ the first digit, the resulting number will be $$$99050$$$ (the $$$2$$$ zeroes going next to the first digit are automatically removed).What is the minimum number of steps to get a number such that it is divisible by $$$25$$$ and positive? It is guaranteed that, for each $$$n$$$ occurring in the input, the answer exists. It is guaranteed that the number $$$n$$$ has no leading zeros.

Input: The first line contains one integer $$$t$$$ ($$$1 \le t \le 10^4$$$) — the number of test cases. Then $$$t$$$ test cases follow.Each test case consists of one line containing one integer $$$n$$$ ($$$25 \le n \le 10^{18}$$$). It is guaranteed that, for each $$$n$$$ occurring in the input, the answer exists. It is guaranteed that the number $$$n$$$ has no leading zeros.

Output: For each test case output on a separate line an integer $$$k$$$ ($$$k \ge 0$$$) — the minimum number of steps to get a number such that it is divisible by $$$25$$$ and positive.

Note: In the first test case, it is already given a number divisible by $$$25$$$.In the second test case, we can remove the digits $$$1$$$, $$$3$$$, and $$$4$$$ to get the number $$$75$$$.In the third test case, it's enough to remove the last digit to get the number $$$325$$$.In the fourth test case, we can remove the three last digits to get the number $$$50$$$.In the fifth test case, it's enough to remove the digits $$$4$$$ and $$$7$$$.

Sample Inputs:
5
100
71345
3259
50555
2050047

Sample Outputs:
0
3
1
3
2

Solution (Python):
for s in [*open(0)][1:]:
    a = []
    i = 0
    while (x := s[(i := (i - 1))]) not in a:
        a += '05' * (x == '0') + '27' * (x == '5')
    print(-i - 3)

Solution (Python):
from collections import *
from functools import *
import sys
input = lambda : sys.stdin.readline().rstrip()
Z = int(input())
for _ in range(Z):
    ss = input()
    n = len(ss)
    minn = 100
    o = ss.rfind('0')
    if o != -1:
        oo = ss.rfind('0', 0, o)
        if oo != -1:
            minn = min(minn, n - (oo + 2))
        oo = ss.rfind('5', 0, o)
        if oo != -1:
            minn = min(minn, n - (oo + 2))
    o = ss.rfind('5')
    if o != -1:
        oo = ss.rfind('2', 0, o)
        if oo != -1:
            minn = min(minn, n - (oo + 2))
        oo = ss.rfind('7', 0, o)
        if oo != -1:
            minn = min(minn, n - (oo + 2))
    print(minn)

Solution (Python):
for s in [*open(0)][1:]:
    a = []
    i = 0
    while (x := s[(i := (i - 1))]) not in a:
        a += '05' * (x == '0') + '27' * (x == '5')
    print(-i - 3)