4) преобразуем данные в целые
числа и сразу сортируем
data = sorted( list(map(int, data)) )
5) теперь накапливаем сумму в переменной
total, пока она остается не больше, чем
S:
total = 0
for i, val in enumerate(data):
if total + val > S: break
total += val
6)
как только сумма превысила S, произойдёт выход из цикла по оператору
break, а в
переменной
i останется количество добавленных значений; выводим его на экран:
print(i)
7) вычисляем запас, который мы можем уменьшить с
помощью замены одного
выбранного значения на другое:
delta = S - total
8) теперь выбираем из
массива данных те значения, которые могут быть выбраны:
разность между таким значением и наибольшим выбранным элементом data[i]
должна быть не больше, чем
delta:
candidates = [x for x in data
if x-data[i-1] <= delta]
9) остается найти второй ответ: максимум из чисел-кандидатов:
print( max(candidates) )
10) приведём
полную программу
with open("26.txt") as Fin:
data = Fin.readlines()
S, _ = map( int, data[0].split() )
del data[0]
data = sorted( list(map(int, data)) )
Достарыңызбен бөлісу: