.04 Пары/тройки чисел, выбрать из каждой, кратность
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Набор данных состоит из троек натуральных чисел. Необходимо распределить все числа на три группы, при этом в каждую группу должно попасть ровно одно число из каждой исходной тройки. Сумма всех чисел в первой группе должна быть чётной, во второй – нечётной. Определите максимально возможную сумму всех чисел в третьей группе.
Входные данные
Первая строка входного файла содержит число N – общее количество троек в наборе. Каждая из следующих N строк содержит три натуральных числа, не превышающих 10 000.
Пример входного файла
3
1 2 3
9 16 4
6 11 7
Для указанных данных искомая сумма равна 30, она соответствует такому распределению чисел по группам: (1, 9, 6), (2, 4, 7), (3, 16, 11). Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. В ответе укажите два числа через пробел: сначала значение искомой суммы для файла A, затем для файла B.
Метод минимальных разностей
f = open(’Задание 27B.txt’) n = int(f.readline()) mr = 10 ** 10 # Минимальная разность s1 = 0 # Первая сумма s2 = 0 # Вторая сумма s3 = 0 # Максимальная сумма for i in range(n): # Считывание чисел по возрастанию с помощью сортировки sorted() x, y, z = sorted(map(int, f.readline().split())) s1 += x # Прибавляем минимальное число тройки s2 += y # Прибавляем среднее число тройки s3 += z # Прибавляем наибольшее число тройки d1 = z - x # Разность для возможной замены на макс. числа на мин. число d2 = z - y # Разность для возможной замены на макс. числа на ср. число # В любом случае одна из сумм будет иметь остаток 0 или 1, # так что достаточно будет поменять остаток второй суммы. # Для этого нужно искать минимальную нечётную разность. if (d1 < mr) and (d1 % 2 != 0): mr = d1 if (d2 < mr) and (d2 % 2 != 0): mr = d2 if (s1 % 2 == 0 and s2 % 2 == 1) or (s1 % 2 == 1 and s2 % 2 == 0): print(s3) else: if mr == 10 ** 10: # Если нечётная разность не была найдена print(0) else: # Иначе вычитаем найденную разность для изменения остатка print(s3 - mr)
Метод частичных сумм
f = open(’Задание 27B.txt’) n = int(f.readline()) s = 0 rem = 0 m = [0, -1000000000000] for i in range(n): a, b, c = [int(k) for k in f.readline().split()] m_new = [-100000000, -100000000] for j in range(2): t = (m[j]+a) % 2 if (m[j] + a > m_new[t]): m_new[t] = m[j]+a for j in range(2): t = (m[j]+b) % 2 if (m[j] + b > m_new[t]): m_new[t] = m[j]+b for j in range(2): t = (m[j]+c) % 2 if (m[j] + c > m_new[t]): m_new[t] = m[j]+c for j in range(2): m[j] = m_new[j] print(m[0])
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

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

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

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

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

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!