решай.ai · шпаргалка

Задание 26: Обработка целочисленной информации

ЕГЭ Информатика

Как выглядит

Сюжет обычно бытовой: архивация файлов, распределение ресурсов, обработка показаний датчиков. Во входном файле в первой строке даны параметры — например SS (ограничение) и NN (количество элементов, до 1000–5000), затем в NN строках идут сами числа a1,a2,…,aNa_1, a_2, \dots, a_N (обычно натуральные, не больше 100). Нужно вывести одно или два числа-ответа: например, максимальное количество элементов, которые можно уместить в ограничение, и дополнительный параметр (максимальный или минимальный элемент в этом наборе). Задание оценивается в 2 балла — по одному баллу за каждое верно найденное число.

Что нужно знать

  • SS — ограничение (объём диска, лимит времени, вместимость); NN — количество элементов; a1,…,aNa_1,\dots,a_N — значения.
  • Префиксная сумма отсортированного по возрастанию массива: Pk=a(1)+a(2)+⋯+a(k)P_k = a_{(1)}+a_{(2)}+\dots+a_{(k)}.
  • Монотонность: если массив отсортирован по возрастанию, PkP_k не убывает при росте kk, поэтому можно искать максимальное допустимое kk простым проходом или бинарным поиском.
  • Условие допустимости набора из kk элементов: Pk≤SP_k \le S.
  • Жадный принцип: чтобы вместить максимум элементов при ограничении суммы, берут наименьшие по значению элементы.
  • Чтобы максимизировать «верхний» элемент в наборе при фиксированном kk, используют метод последовательных замен наименьшего выбранного элемента на следующий по величине из оставшихся, если сумма остаётся ≤S\le S.
  • Резерв после набора: R=S−PkR = S - P_k — показывает, сколько «свободного места» остаётся для возможных замен.
  • Суммарный объём данных редко превышает разумные пределы (например, 5000×100=5000005000 \times 100 = 500000), но тип переменной для суммы стоит выбирать с запасом.

Алгоритм

  1. Прочитать первую строку файла: значения SS и NN.
  2. Прочитать NN чисел в массив.
  3. Отсортировать массив по возрастанию.
  4. Накапливать сумму по возрастанию элементов, пока она не превысит SS; число накопленных элементов — первый ответ kk.
  5. Зафиксировать сумму PkP_k и текущий набор (первые kk элементов).
  6. Для второго ответа применить метод замен: пытаться заменить наименьший элемент текущего набора на следующий недобранный элемент, если после замены сумма остаётся ≤S\le S; повторять, пока находятся выгодные замены.
  7. Вывести два числа в требуемом порядке: количество элементов и найденный оптимальный параметр (например, максимальный размер файла).

Ловушки

  • Сортировка в неверном порядке: для максимизации количества элементов нужно сортировать по возрастанию, а не по убыванию.
  • Наивный вывод максимума из первых kk наименьших элементов без метода замен — это даёт заниженный второй ответ (40 вместо 50 в примере выше).
  • Остановка после одной удачной замены: нужно повторять процесс, пока находятся выгодные варианты, иначе результат окажется неоптимальным.
  • Ошибки при чтении входного файла: путаница порядка SS и NN в первой строке, неверное количество считанных строк.
  • Переполнение переменных при суммировании большого количества элементов — стоит проверять диапазон типа данных в выбранном языке.
  • Выход за границы массива при переборе кандидатов на замену (особенно на последнем элементе).
  • Неверный порядок чисел в ответе: сначала количество, затем оптимальный параметр, а не наоборот.
reshay.ai/ege/informatika/zadanie-26 — задачи с разборами и тренажёр

Полный гайд и задачи задания 26 →