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

.04 Пары/тройки чисел, выбрать из каждой, кратность

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

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

Задача 1#22908

Задание выполняется с использованием прилагаемых файлов

В текстовом файле записан набор пар натуральных чисел, не превышающих 10 000. Необходимо выбрать из набора некоторые пары так, чтобы первое число в каждой выбранной паре было чётным, сумма бОльших чисел во всех выбранных парах была чётной, а сумма меньших – нечётной. Какую наибольшую сумму чисел во всех выбранных парах можно при этом получить?

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

Первая строка входного файла содержит целое число N – общее количество чисел в наборе. Каждая из следующих N строк содержит пару чисел.

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

4

4 10

7 2

18 13

22 11

В данном случае есть три подходящие пары: (4, 10), (18, 13) и (22, 11). Пара (7, 2) не подходит, так как в ней первое число нечётное. Чтобы удовлетворить требования, надо взять пары (4, 10) и (22, 11). Сумма бОльших чисел в этом случае равна 32, сумма меньших равна 15. Общая сумма равна 47. В ответе надо указать число 47.

Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. В ответе укажите два числа через пробел: сначала значение искомой суммы для файла A, затем для файла B.

Вложения к задаче
Показать ответ и решение
f = open(’Задание_27_A__k3bv.txt’)
n = int(f.readline())
sum = 0
big = 0
small = 0
m10, m11, m01 = 10**9, 10**9, 10**9
for i in range(n):
    x, y = [int(s) for s in f.readline().split()]
    if x % 2 == 0:
        x, y = min(x, y), max(x, y)
        sum += x + y
        big += y
        small += x
        if y % 2 == 1:
            if x % 2 == 1:
                m11 = min(m11, x + y)
            else:
                m10 = min(m10, x + y)
        else:
            if x % 2 == 1:
                m01 = min(m01, x + y)
if big % 2 == 0 and small % 2 == 1:
    print(sum)
elif big % 2 == 1 and small % 2 == 1:
    print(sum - min(m10, m01 + m11))
elif big % 2 == 0 and small % 2 == 0:
    print(sum - min(m01, m10 + m11))
else:
    print(sum - min(m11, m01 + m10))

Ответ: 164755 331196339

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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