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

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

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

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

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

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

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

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

 

Входной файл содержит сведения о массе грузов, поступивших в транспортную компанию, и о параметрах контейнеров, которые у неё имеются. В один контейнер может быть упакован только один груз. Найдите способ для распределения максимального количества грузов по контейнерам. Если способов несколько, то нужно выбрать такой, чтобы можно было упаковать наиболее тяжёлый груз.

 

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

В первой строке входного файла находятся два натуральных числа N (N ≤ 1000) и M (M ≤ 1000) – количество грузов и количество контейнеров соответственно. Следующие N строк содержат числа, обозначающие массы грузов, затем идут M строк, где указана максимально допустимая масса груза для размещения в конкретном контейнере. Числа M и N могут быть не равны.

 

Запишите в ответе два натуральных числа: сначала максимальное количество грузов, которое может быть упаковано, затем массу самого тяжёлого упакованного груза в этом случае.

 

Типовой пример организации данных во входном файле

5 6

160

130

120

150

100

150

50

155

99

100

170

При таких исходных данных максимальное количество грузов, которые могут быть упакованы в контейнеры, равно 4. При этом масса самого тяжёлого груза составит 160, а упакованными окажутся грузы массой, например, 160, 130, 120 и 100 –
в контейнеры, выдерживающие массу 170, 150, 155 и 100.

 

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

 

 

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


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

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

Ответ: 791 197491

Решение.

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

Заголовок задаёт N = 853 грузов и M = 796 контейнеров. Сначала читаем N масс, затем M грузоподъёмностей. Эти количества различны, и один контейнер вмещает только один груз.

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

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

Следовательно, жадное распределение максимально по количеству. Оно включает самый тяжёлый груз, который вообще помещается в наибольший контейнер, и тем самым оптимизирует второй критерий. Время O(N log N + M log M), память O(N + M).

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

with open("data.txt", encoding="utf-8-sig") as f:
    n, m = map(int, f.readline().split())
    weights = sorted((int(f.readline()) for _ in range(n)), reverse=True)
    capacities = sorted((int(f.readline()) for _ in range(m)), reverse=True)
count = 0
heaviest = 0
for weight in weights:
    if count < m and weight <= capacities[count]:
        heaviest = max(heaviest, weight)
        count += 1
print(count, heaviest)

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

Упаковано 791 грузов. Первые три назначения (номера грузов и контейнеров считаются отдельно с единицы):

ГрузМассаКонтейнерГрузоподъёмность
817197491172197604
483197485161197595
732197326217197578

В каждой из 791 пар масса не превышает грузоподъёмности, каждый номер используется один раз. Максимальная масса выбранного груза 197491.

Ответ: 791 197491.

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

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

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

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

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

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

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