Исправленная задача №70 f = open('27-70b.txt', 'r') n = int(f.readline()) s = {0: 0} sm = 0 kmax = 0 z = [] for i in range(n): p = list(map(int, f.readline().split())) sm += sum(p) sums = [s[j] + k for j in s for k in p] s = {x % 10: x for x in sorted(sums)} for i in s: if (s[i] - (sm - s[i])) % 5 == 0: z.append(s[i] - (sm - s[i])) print(max(z))
58:05 (№70) в сборнике ответы правильные. Проблема в решении. Когда мы ищем два словаря (минимальные и максимальные суммы) мы получаем разбивку на разные группы, которые будут частично пересекаться. Т.е. один элемент может дважды входить в обе группы или наоборот, не входить. В итоге мы будем получать суммы из групп чисел, которые не отвечают условию (ровно две непересекающихся группы из всех элементов). Нужно только один словарь заводить и искать сумму всех чисел. Далее вычитанием находим сумму второй группы. Далее разность этих сумм даст искомую разность. Успехов!
Исправленная задача №70
f = open('27-70b.txt', 'r')
n = int(f.readline())
s = {0: 0}
sm = 0
kmax = 0
z = []
for i in range(n):
p = list(map(int, f.readline().split()))
sm += sum(p)
sums = [s[j] + k for j in s for k in p]
s = {x % 10: x for x in sorted(sums)}
for i in s:
if (s[i] - (sm - s[i])) % 5 == 0:
z.append(s[i] - (sm - s[i]))
print(max(z))
нечитабельный код увы
58:05 (№70) в сборнике ответы правильные. Проблема в решении. Когда мы ищем два словаря (минимальные и максимальные суммы) мы получаем разбивку на разные группы, которые будут частично пересекаться. Т.е. один элемент может дважды входить в обе группы или наоборот, не входить. В итоге мы будем получать суммы из групп чисел, которые не отвечают условию (ровно две непересекающихся группы из всех элементов). Нужно только один словарь заводить и искать сумму всех чисел. Далее вычитанием находим сумму второй группы. Далее разность этих сумм даст искомую разность. Успехов!
Да, точно. Перерешал примерно так же как и в 66 задаче. Спасибо!
Четвёртое часовое видео.
Согласен, надо урезать хрон.