стереть
Класс
8 9 10 11
Нужно авторизоваться
Нужно авторизоваться
Нужно авторизоваться
Нет аккаунта?
При наличии аккаунта на платформе можно
Введите больше 6 символов
Проблемы со входом?
Введи последние 4 цифры номера, с которого
поступит звонок. Трубку брать не нужно.
Повторный звонок через
сек.
Добро пожаловать!
Зарегистрируйся и получи Демо мастер-группы на 10 дней по любимым предметам бесплатно.
Добро пожаловать!
Как тебя зовут?
Введите не меньше 2 символов
Привяжем номер телефона
Введите не меньше 2 символов
Привяжем номер телефона
Повторный звонок через
30 сек.
Теперь нужно подтвердить номер - введи последние 4 цифры номера, с которого поступит звонок. Трубку брать не нужно
Введите не меньше 2 символов
Придумаем пароль
Почти закончили! Теперь нужно создать надежный пароль
Введите не меньше 2 символов
Немного о тебе
В какой класс ты переходишь?
Укажи, какие предметы будешь или хочешь сдавать
Введите не меньше 2 символов
На почту 12345@mail.ru отправлена ссылка для сброса пароля.
OK
Информатика

Задача по теме: "Эффективное программирование"

Информатика
Задание 27 Эффективное программирование
Подсказка
За подсказку ты получишь лишь половину баллов
Использовать
Автор
Крылов С.С., Чуркина Т.Е. Информатика: единый государственный экзамен. — Москва: Издательство "Национальное образование", 2023. — 256 с. Материалы публикуются в учебных целях
Просмотры
494
banner-img

Дана последовательность из N натуральных чисел. Рассматриваются все непрерывные подпоследовательности, такие что сумма элементов каждой из них кратна k = 123. Найдите среди них подпоследовательность с минимальной суммой, определите ее длину. Если таких подпоследовательностей найдено несколько, в ответе укажите количество элементов самой длинной из них.

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

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

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

Пример организации во входном файле:

7
1
3
4
193
8
5
195

Для указанных входных данных при k=100 искомая длина последовательности равна 3. 

Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.

Предупреждение: для обработки файла В не следует использовать переборный алгоритм для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.

loading
Решение
single-task__solution-banner

Решение:

Для решения этого задания нужно написать на языке программирования Python код для сортировки значений:

 

f=open('27v05_A.txt') # открываем файл 
p = [int(x) for x in f] # читаем из файла всё 
N = p[0] #количество элементов в массиве
k=123
del(p[0])# удаляем первый элемент массива
f.close() # закрываем файл
sum_min=10000000  # минимальной сумме присваиваем верхнее значение
lo=0 #длина подпоследовательности
so=0 #  суммы непрерывных последовательностей
a=[0]*k #  суммы с одинаковыми остатками
b=[0]*k #  длины подпоследовательностей с одинаковыми остатками
for i in range(N):
    so += p[i] # накапливаем сумму
    ost = so % k # находим остаток от деления данной суммы на k
    if a[ost] != 0:
        d = so - a[ost] #находим разницу между текущим s и суммой с таким же остатком
        if d < sum_min: 
            lo = i - b[ost] # запоминаем ее длину
        if d == sum_min:
            lo = max (lo, i - b[ost])   #если последовательности имеют равные длины, находим наибольшей длины
        sum_min = min(sum_min, d) # ищем минимальную сумму
    elif ost == 0 and so  <  sum_min:# если последовательность начинается с нулевого элемента
            lo = i + 1  # длина на 1 больше
            sum_min = so
    a[ost] = so # запоминаем текущее значение суммы 
    b[ost] = i# запоминаем номер элемента
print(lo)

 


Ответ: 1 3

На экзамене это задание принесло бы тебе 2/2 баллов.
Решать еще

Сообщение об ошибке

Расскажите, в каком месте допущена ошибка, мы как можно быстрее её исправим. Спасибо за обратную связь!

Здравствуйте!

Выберите информацию о себе ниже

pay-success-img

Оплата прошла успешно!

pay-un-success-img

Оплата не прошла

Попробуйте снова