Задание EGEINF70B483: Сортировка, отбор и моделирование

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Сортировка, отбор и моделирование.

Учебные темы: Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве.

Впишите правильный ответ.

Рисунок из условия ФИПИ

 

Задание выполняется с использованием прилагаемых
к заданию файлов.

 

На грузовом судне необходимо перевезти контейнеры, имеющие одинаковый габарит и разные массы. Общая масса всех контейнеров превышает грузоподъёмность судна. Количество грузовых мест на судне не меньше количества контейнеров, назначенных к перевозке. Какое максимальное количество контейнеров можно перевезти за один рейс и какова масса самого тяжёлого контейнера среди всех контейнеров, которые можно перевезти за один рейс?

 

Входные данные.

В первой строке входного файла находятся два числа: S –  грузоподъёмность судна (натуральное число, не превышающее 100 000) и N –  количество контейнеров (натуральное число, не превышающее 10 000). В следующих N строках находятся значения масс контейнеров, требующих транспортировки (все числа натуральные, не превышающие 100), каждое в отдельной строке.

 

Выходные данные.

Два целых неотрицательных числа: максимальное количество контейнеров, которые можно перевезти за один рейс и масса наиболее тяжёлого из них.

Пример входного файла:

100 4

80

30

50

40

 

При таких исходных данных можно транспортировать за один раз максимум 2 контейнера. Возможные массы этих двух контейнеров 30 и 40, 30 и 50 или 40 и 50. Поэтому ответ для приведённого примера:

 

2

50

 

 

 

Скачать файл задания (TXT, ФИПИ)


i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.10 Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве
Тип ответа:Краткий ответ
Номер: 70B483
НЕ РЕШЕНО Ответить

Решение задания EGEINF70B483

Ответ: 1612 90

Решение.

Сохраним приложенный текстовый файл под именем data.txt. Первая строка задаёт параметры задачи; её нельзя считать обычной записью данных. В программе нумерация элементов списка начинается с нуля, а номера из условия сохраняются без сдвига.

Грузоподъёмность S = 99990, количество контейнеров N = 9999. Ограничение относится к суммарной массе; число грузовых мест не мешает выбору. Сначала нужно максимальное количество, и только среди таких наборов — наибольший вес одного контейнера.

Сортируем массы по возрастанию и берём наибольший начальный отрезок, сумма которого не превышает S. Пусть его длина k. Любой набор k + 1 контейнеров весит не меньше суммы k + 1 самых лёгких, которая уже превышает S. Значит, больше k перевезти нельзя.

Для второго критерия оставим k − 1 самых лёгких контейнеров. Их сумма минимальна, поэтому для последнего контейнера остаётся максимально возможный запас R = S − сумма первых k − 1. Среди остальных выбираем наибольшую массу не больше R. Нельзя выбирать уже занятый экземпляр повторно.

Любой другой набор из k контейнеров с самым тяжёлым весом w содержит ещё k − 1 контейнеров, чья сумма не меньше нашей. Поэтому w ≤ R, а выбранный максимум не меньше w. Это доказывает второй критерий. Сортировка O(N log N), остальные действия O(N), память O(N).

Полная программа на Python:

with open("data.txt", encoding="utf-8-sig") as f:
    capacity, n = map(int, f.readline().split())
    weights = sorted(int(f.readline()) for _ in range(n))
total = 0
count = 0
for weight in weights:
    if total + weight > capacity:
        break
    total += weight
    count += 1
if count == 0:
    print(0, 0)
else:
    prefix = sum(weights[:count - 1])
    limit = capacity - prefix
    heaviest = max(w for w in weights[count - 1:] if w <= limit)
    print(count, heaviest)

Проверка результата.

Набор из 1612 контейнеров с максимальной массой одного 90 весит 99957 ≤ 99990. Сумма 1613 самых лёгких контейнеров равна 99997 > 99990, что исключает увеличение количества. В достигающем ответ наборе каждый исходный контейнер выбран не более одного раза.

Ответ: 1612 90.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF70B483.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.