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

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

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

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

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

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

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

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

 

В магазине для упаковки подарков есть N кубических коробок. Самой интересной считается упаковка подарка по принципу матрёшки – подарок упаковывается в одну из коробок, та в свою очередь в другую коробку и т.д. Одну коробку можно поместить в другую, если длина её стороны хотя бы на 3 единицы меньше длины стороны другой коробки. Определите наибольшее количество коробок, которое можно использовать для упаковки одного подарка, и максимально возможную длину стороны самой маленькой коробки, где будет находиться подарок. Размер подарка позволяет поместить его в самую маленькую коробку.

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

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

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

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

5

43

40

32

40

30

Пример входного файла приведён для пяти коробок и случая, когда минимальная допустимая разница между длинами сторон коробок, подходящих для упаковки «матрёшкой», составляет 3 единицы.

При таких исходных данных условию задачи удовлетворяют наборы коробок с длинами сторон 30, 40 и 43 или 32, 40
и 43 соответственно, т.е. количество коробок равно 3, а длина стороны самой маленькой коробки равна 32.

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

 

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


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

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

Ответ: 2767 51

Решение.
Сначала максимизируем количество вложенных коробок. Среди наборов с этим количеством нужно получить наибольшую сторону самой маленькой коробки. Разность сторон соседних коробок должна быть не меньше 3, равенство 3 допустимо.
Отсортируем длины сторон по убыванию. Начнём с самой большой коробки. Далее каждый раз берём самую большую ещё не выбранную коробку, которая хотя бы на 3 меньше последней выбранной. Так строим цепочку от внешней коробки к внутренней.
Обоснуем выбор. Пусть стороны произвольной допустимой цепочки по убыванию равны b₁, b₂, …, а нашего набора — a₁, a₂, … . Очевидно, a₁ ≥ b₁, потому что первой взята самая большая коробка.
Если aᵢ ≥ bᵢ, то bᵢ₊₁ ≤ bᵢ − 3 ≤ aᵢ − 3. Значит при выборе следующей коробки существует допустимая сторона хотя бы bᵢ₊₁. Мы выбираем наибольшую доступную, поэтому aᵢ₊₁ ≥ bᵢ₊₁. По индукции наш алгоритм может построить цепочку не короче любой другой. Следовательно, её длина максимальна.
То же сравнение для последнего элемента показывает: среди цепочек максимальной длины последняя выбранная сторона максимально возможная. Поэтому второй ответ получается сразу, отдельная замена внутренней коробки не нужна.
Программа на Python 3:

Перед запуском сохраните скачанный файл под именем 26.txt рядом с программой.

with open('26.txt') as source:
    n = int(source.readline())
    sizes = [int(line) for line in source]
assert len(sizes) == n
sizes.sort(reverse=True)
count = 0
last = None
for size in sizes:
    if last is None or last - size >= 3:
        count += 1
        last = size
print(count, last)

В файле 10000 коробок. Получена цепочка из 2767 коробок, сторона самой маленькой равна 51.
Проверка крайних участков цепочки:

УчастокСтороны в порядке вложения
Начало9998, 9995, 9991, 9987, 9984
Конец63, 60, 57, 54, 51

Все соседние разности во всей цепочке не меньше 3. На примере из условия алгоритм выбирает 43, 40, 32: ответ 3 и 32; вторую коробку размера 40 использовать нельзя.
Независимое динамическое программирование по возможным длинам сторон подтвердило максимальную длину 2767 и максимальную внутреннюю сторону 51. Сортировка требует O(N log N) времени, последующий проход O(N), память O(N).
Ответ: 2767 51.

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

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

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

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

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

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

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