Python. Задача 8-43

Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности, находящихся на расстоянии не меньше 10 (разница в индексах элементов должна быть 10 или более). Необходимо определить количество пар, произведение чисел в которых кратно 10.

Входные данные: Дан входной файл, первой строке входных данных задаётся количество чисел N< (10 ≤ N ≤ 100000). В каждой из последующих N строк записано одно натуральное число, не превышающее 10 000.

Пример входных данных:
12
1
5
5
8
9
4
12
14
6
7
9
8

 Пример выходных данных для приведённого выше примера входных данных: 1

Пояснение. Из 12 чисел можно составить 3 пары, удовлетворяющие условию. Это будут элементы с индексами 1 и 11, 1 и 12, 2 и 12. Для заданного набора чисел получаем пары (1, 9), (1, 8), (5, 8). Произведения чисел в этих парах равны 9, 8, 40. На 10 делится одно из этих произведений.

Ответ
1339367564
Решение
# Расстояние между элементами
K = 10
# Циклически заполняемый буфер
a = [0] * K
# счетчик чисел кратных 2
m2 = 0
# счетчик чисел кратных 5
m5 = 0
# счетчик чисел кратных 10
m10 = 0
# счетчик произведений кратных 10
cnt = 0
f = open('c:\\work\\test-8-41-1.txt')
# Считываем количество чисел
N = int(f.readline())
# Заполняем циклический буфер первыми K элементами
for i in range(K):
    a[i] = int(f.readline())
# Для следующих чисел из файла
for i in range(K, N):
    # Индекс буфера
    idx = i % K
    if a[idx] % 10 == 0:
        m10 += 1
    if a[idx] % 5 == 0:
        m5 += 1
    if a[idx] % 2 == 0:
        m2 += 1
    # Считываем очередное число
    x = int(f.readline())
    if x % 10 == 0:
        # Все предыдущие числа, за исключением тех, что в буфере
        # будут составлять пары с текущим
        cnt += i - K + 1
    elif x % 5 == 0:
        # Все предыдущие кратные 2 числа будут составлять пары с текущим
        cnt += m2
    elif x % 2 == 0:
        # Все предыдущие кратные 5 числа будут составлять пары с текущим
        cnt += m5
    else:
        # Все предыдущие кратные 10 числа будут составлять пары с текущим
        cnt += m10
    a[idx] = x
f.close()
print(cnt)