Problem p02588 (python)

Fixed submission:
#!/usr/bin/env python3
import sys
input = sys.stdin.readline
import math

n = int(input())
a_top = [[], []]
a_base = [[], []]
for _ in range(n):
    s = input().rstrip()
    if "." not in s:
        top = int(s)
        base = 1
    else:
        dot = s.index(".")
        length = len(s)
        lower_num = len(s) - dot - 1
        top = int(s.replace(".", ""))
        base = pow(10, lower_num)
    gcd = math.gcd(top, base)
    top = top // gcd
    base = base // gcd
    twos = 0
    fives = 0
    while top % 2 == 0:
        twos += 1
        top //= 2
    while top % 5 == 0:
        fives += 1
        top //= 5
    a_top[0].append(twos)
    a_top[1].append(fives)
    twos = 0; fives = 0
    while base % 2 == 0:
        twos += 1
        base //= 2
    while base % 5 == 0:
        fives += 1
        base //= 5
    a_base[0].append(twos)
    a_base[1].append(fives)

nums = dict()
offset = 16
field = [[0] * 35 for _ in range(35)]
for tt, tf, bt, bf in zip(a_top[0], a_top[1], a_base[0], a_base[1]):
    if tt - bt > 15:
        twos = 15
    else:
        twos = tt - bt
    if tf - bf > 15:
        fives = 15
    else:
        fives = tf - bf
    field[twos + offset][fives + offset] += 1

single = 0
double = 0
for i in range(35):
    for j in range(35):
        for k in range(35):
            for l in range(35):
                if i == k and j == l:
                    if i - offset + k - offset >= 0 and j - offset + l - offset >= 0:
                        double += field[i][j] * (field[i][j] - 1)
                else:
                    if i - offset + k - offset >= 0 and j - offset + l - offset >= 0:
                        double += field[i][j] * field[k][l]
print(single + double // 2)

Buggy submission (verdict: Runtime Error):
#!/usr/bin/env python3
import sys
input = sys.stdin.readline
import math

n = int(input())
a_top = [[], []]
a_base = [[], []]
for _ in range(n):
    s = input().rstrip()
    if "." not in s:
        top = int(s)
        base = 1
    else:
        dot = s.index(".")
        length = len(s)
        lower_num = len(s) - dot - 1
        top = int(s.replace(".", ""))
        base = pow(10, lower_num)
    gcd = math.gcd(top, base)
    top = top // gcd
    base = base // gcd
    twos = 0
    fives = 0
    while top % 2 == 0:
        twos += 1
        top //= 2
    while top % 5 == 0:
        fives += 1
        top //= 5
    a_top[0].append(twos)
    a_top[1].append(fives)
    twos = 0; fives = 0
    while base % 2 == 0:
        twos += 1
        base //= 2
    while base % 5 == 0:
        fives += 1
        base //= 5
    a_base[0].append(twos)
    a_base[1].append(fives)

nums = dict()
offset = 16
field = [[0] * 35 for _ in range(35)]
for tt, tf, bt, bf in zip(a_top[0], a_top[1], a_base[0], a_base[1]):
    field[tt - bt + offset][tf - bf + offset] += 1

single = 0
double = 0
for i in range(35):
    for j in range(35):
        for k in range(35):
            for l in range(35):
                if i == k and j == l:
                    if i - offset + k - offset >= 0 and j - offset + l - offset >= 0:
                        double += field[i][j] * (field[i][j] - 1)
                else:
                    if i - offset + k - offset >= 0 and j - offset + l - offset >= 0:
                        double += field[i][j] * field[k][l]
print(single + double // 2)

Buggy submission (verdict: Runtime Error):
#!/usr/bin/env python3
import sys
input = sys.stdin.readline
import math

n = int(input())
a_top = [[], []]
a_base = [[], []]
for _ in range(n):
    s = input().rstrip()
    if "." not in s:
        top = int(s)
        base = 1
    else:
        dot = s.index(".")
        length = len(s)
        lower_num = len(s) - dot - 1
        top = int(s.replace(".", ""))
        base = pow(10, lower_num)
    gcd = math.gcd(top, base)
    top = top // gcd
    base = base // gcd
    twos = 0
    fives = 0
    while top % 2 == 0:
        twos += 1
        top //= 2
    while top % 5 == 0:
        fives += 1
        top //= 5
    a_top[0].append(twos)
    a_top[1].append(fives)
    twos = 0; fives = 0
    while base % 2 == 0:
        twos += 1
        base //= 2
    while base % 5 == 0:
        fives += 1
        base //= 5
    a_base[0].append(twos)
    a_base[1].append(fives)

nums = dict()
offset = 10
field = [[0] * 22 for _ in range(22)]
for tt, tf, bt, bf in zip(a_top[0], a_top[1], a_base[0], a_base[1]):
    field[tt - bt + offset][tf - bf + offset] += 1

single = 0
double = 0
for i in range(22):
    for j in range(22):
        for k in range(22):
            for l in range(22):
                if i == k and j == l:
                    if i - offset + k - offset >= 0 and j - offset + l - offset >= 0:
                        double += field[i][j] * (field[i][j] - 1)
                else:
                    if i - offset + k - offset >= 0 and j - offset + l - offset >= 0:
                        double += field[i][j] * field[k][l]
print(single + double // 2)