Задача к ЕГЭ по информатике на тему «Цепочки, выбор последовательности, префиксные суммы» №1

Дано натуральное число N  , затем дана последовательность N  натуральных чисел. Необходимо определить количество непрерывных подпоследовательностей, сумма элементов которых кратна 1000.

Входные данные:

Даны два входных файла (файл А и файл В), каждый из которых содержит в первой строке одно целое число N (1 ≤ N ≤ 1000000)  — количество чисел. Каждая из следующих N  строк содержит натуральное число, меньшее 10000.

В ответе укажите два числа: сначала значение для файла A  , затем для файла B  .

Неэффективное решение

f = open("6A.txt")
n = int(f.readline())
a = []
ans = 0
for i in range(n):
    a.append(int(f.readline()))

for i in range(n):
    s = 0
    for j in range(i, n):
        s += a[j]
        if s % 1000 == 0:
            ans += 1
print(ans)

Эффективное решение

f = open("6B.txt")
n = int(f.readline())
prefs = [0] * 1000  # кол-во преф. сумм по остаткам
ans, s = 0, 0
for i in range(n):
    x = int(f.readline())
    s += x
    if s % 1000 == 0:
        ans += 1
    ans += prefs[s % 1000]
    prefs[s % 1000] += 1
print(ans)

Ответ: 448 1800131825
Оцените статью
Я решу все!