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

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

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

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

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

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

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

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

 

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

 

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

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

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

 

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

6 3

43 1

41 0

39 0

38 1

26 0

24 1

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

При таких исходных данных условию задачи удовлетворяют наборы коробок с длинами сторон 24, 39, 43 (материалы этих коробок – 1, 0, 1 соответственно) или 26, 38, 41 (материалы – 0, 1,
0 соответственно). Таким образом, количество коробок равно 3,
а максимально возможная длина стороны самой маленькой коробки равна 26.

 

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

 

 

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


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

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

Ответ: 166 63

Решение.

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

В файле N = 4435 коробок, обязательная разность D = 57. Кроме размера нужно учитывать материал: соседние коробки должны иметь разные обозначения 0 и 1. Простое начало с самой большой коробки не гарантирует оптимальную длину при чередовании материалов.

Обрабатываем возможные стороны s по убыванию. Обозначим best[c][s] максимальное количество коробок в цепочке, внутренняя коробка которой имеет материал c и сторону не меньше s. Цепочку удобно наращивать внутрь: если существует коробка размера s и материала c, то снаружи от неё может стоять цепочка с внутренним материалом 1 − c и стороной не меньше s + D.

Поэтому длина лучшей цепочки, заканчивающейся ровно этой коробкой, равна 1 + best[1 − c][s + D]. После вычисления обновляем best[c][s] максимумом нового значения и best[c][s + 1]. Нулевое значение означает отсутствие внешней цепочки. Поскольку D > 0, все зависимости относятся к уже обработанным большим сторонам.

Рассматриваются оба материала и все размеры, поэтому не теряется ни один возможный выбор внешней коробки. Из кандидатов сначала выбираем наибольшую длину, затем наибольшую сторону внутренней коробки. Повторы одинакового размера и материала не увеличивают длину, так что достаточно множеств размеров. При максимальной стороне L время O(N + L + D), память O(L + D).

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

with open("data.txt", encoding="utf-8-sig") as f:
    n, gap = map(int, f.readline().split())
    sizes = [set(), set()]
    for _ in range(n):
        size, material = map(int, f.readline().split())
        sizes[material].add(size)
limit = max(max(group, default=0) for group in sizes)
best = [[0] * (limit + gap + 2) for _ in range(2)]
answer = (0, 0)
for size in range(limit, 0, -1):
    for material in range(2):
        best[material][size] = best[material][size + 1]
        if size in sizes[material]:
            length = 1 + best[1 - material][size + gap]
            best[material][size] = max(best[material][size], length)
            answer = max(answer, (length, size))
print(*answer)

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

Найденная длина 166, внутренняя сторона 63. Фрагмент достигающей ответ цепочки от внутренней коробки к внешней:

Номер записиСторонаМатериал
314631
3841280
32871871
312460
18393041
96998760
195199391
2023100000

Во всей цепочке материалы чередуются, а минимальный прирост стороны равен 57 ≥ 57. Таблица показывает начало и конец; глобальный максимум подтверждён динамическим расчётом для всех размеров.

Ответ: 166 63.

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

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

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

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

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

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

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