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

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

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

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

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

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

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

7
1
3
4
193
8
5
195

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

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

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

loading
Решение

Решение:

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

 

f=open('27v08_B.txt')# открываем файл 
p = [int(x) for x in f]# читаем из файла всё 
N = p[0]#количество элементов в массиве
k=157
del(p[0])# удаляем первый элемент массива
f.close()# закрываем файл
sum_max=0 # минимальной сумме присваиваем нижнее значение
lo=0 #длина подпоследовательности
so=0 #  суммы непрерывных последовательностей
a=[0]*k#  суммы с  остатками от 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] #находим разницу кратную k
        if d > sum_max:
            lo = i - b[ost]# запоминаем ее длину
        if d == sum_max:
            lo = min (lo, i - b[ost]) #если последовательности имеют равные длины, находим наибольшей длины
        sum_max = max(d, sum_max)
    else:
        a[ost] = so  # сумма запоминается  если  не равна 0
        b[ost] = i# запоминаем номер элемента
        if ost == 0 and so  >  sum_max:
            lo = i + 1
            sum_max = so     
print(lo)


Ответ: 601 1497991

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

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

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

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

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

pay-success-img

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

pay-un-success-img

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

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