Как решать задание 26 ЕГЭ по информатике (жадность, сортировка)?
Задание 26 даёт файл с данными (например, размеры файлов и объём диска) и просит, сколько максимум поместится и какой-то параметр. Это первая задача второй части, и она пугает. Как решать задание 26 на Python?
2 ответа
Задание 26 — первая задача второй части, обработка набора данных из файла. Типичный сюжет: даны числа (размеры, веса, заявки), нужно вместить максимум при ограничении, плюс ответить на второй подвопрос (например, размер последнего вошедшего).
Главный приём — жадный алгоритм через сортировку. Чтобы влезло максимум предметов, бери их по возрастанию величины.
data = open('26.txt').read().split()
n = int(data[0])
sizes = list(map(int, data[1:1+n]))
limit = 1000 # ограничение из условия
sizes.sort() # от меньшего к большему — влезет больше штук
total = 0
count = 0
last = 0
for s in sizes:
if total + s <= limit:
total += s
count += 1
last = s # размер последнего вошедшего
else:
break
print(count, last)
Важно про второй подвопрос: часто спрашивают минимальный размер последнего объекта или сколько ещё осталось места — читай условие очень внимательно, обычно там тонкость, на которую и ставят основные баллы.
Частые ошибки:
- неверно прочитать формат файла (первая строка — количество, дальше данные; иногда по строкам);
- забыть отсортировать (жадность работает только на отсортированных);
- неправильно понять оптимизируемую величину (максимум штук vs максимум суммы — это разные стратегии!).
Если просят максимум по числу — сортируй по возрастанию; если по суммарной ценности — задача сложнее, читай условие.
Ключ к 26 — понять, что именно максимизируем. «Сколько максимум объектов поместится» → сортируй по возрастанию и набирай жадно, это даёт наибольшее количество. Это срабатывает почти всегда в школьном варианте.
И не теряй второй подвопрос: он обычно и есть «дорогой» — там просят конкретный параметр (последний элемент, оставшееся место). Аккуратно разбери формат входного файла: путаница «количество в первой строке + данные дальше» стоит баллов на ровном месте.