Тема . (старое) 27. Программирование

.08 Макс/мин, кол-во пар, сумма/разность/произведение кратно/не кратно на расстоянии

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела (старое) 27. программирование
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#74796

Космическая станция в течение N минут (N – целое число) ежеминутно снимает показания прибора, который измеряет количество пролетевших рядом метеоритов в условных единицах за минуту, предшествующую снятию показаний. Контрольным значением серии показаний называется сумма пары значений, каждое из которых является максимальным, если сравнивать его значение со всеми показаниями до него. Необходимо найти максимальное контрольное значение, при этом между показаниями должно пройти не более 8 минут.

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

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

10

7

13

5

4

8

3

9

2

12

7

Для указанных входных данных значением искомой суммы должно быть число 20. В ответе укажите два числа через пробел: сначала максимальную сумму для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
# Пункт А
f = open(’6_A__2qcvo.txt’)
n = int(f.readline())
a = [int(i) for i in f]
mx = -10 ** 20
for i in range(len(a) - 1):
    for j in range(i + 1, len(a)):
        # Проверяем, что разница между показаниями не больше 8 минут, и
        # первое и второе числа из пары являются максимальными по сравнению
        # со всеми предыдущими числами в последовательности
        if j - i <= 8 and (a[i] == max(a[:i + 1])) and (a[j] == max(a[:j + 1])):
            mx = max(mx, a[i] + a[j])  # обновляем максимальную сумму, если требуется
print(mx)

f = open(’6_B__2qcvp.txt’)
n = f.readline()
a = [int(i) for i in f]
# Первое число последовательности больше - первый
# подходящий максимум
mx = a[0]
# Индекс предыдущего максимума
mx_ind = 0
mx_sum = 0
for i in range(1, len(a)):
    x = a[i]
    # Если x больше предыдущего максимума -
    # он больше всех предыдущих чисел
    if x >= mx:
        # Если расстояние до предыдущего максимума не
        # превышает 8 - эти два максимума можно объединить
        # в сумму
        if i - mx_ind <= 8:
            mx_sum = x + mx
        # Обновление последнего максимума и его индекса
        mx = x
        mx_ind = i
print(mx_sum)

Ответ: 1950 9790

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!