Присоединиться

11 класс·высокий уровень

На складе хранятся кубические контейнеры двух цветов различного

Условие

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

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

Задание 26Входные данные.

Каждая строка входного файла содержит натуральное число и букву A или B.Число обозначает размер контейнера в условных единицах, буква — цвет этого контейнера (буквами A и B условно обозначены два цвета).В ответе запишите два целых числа: сначала максимально возможное количество контейнеров в одном блоке, затем минимальное количество ячеек для хранения всех контейнеров. Ответ:

Ответ

Ответ и полный разбор откроются после входа

Посмотреть ответ

Решение по шагам

  1. Как рассуждать

    Решение. Приведем решение на языке Python.from sys import setrecursionlimitsetrecursionlimit(5000)f = [[int(t[0]), t[1]] for i in open('26.txt').readlines() if (t:=i.split())]spiblock = [] def creat_block(li, nvk, pb, f=''): lila = len(li); global spiblock for i, a in enumerate(li): if a[1] == f and pb - a[0] >= 5: del li[i]; nvk += 1; pd = a[0]; break if lila != len(li): creat_block(li, nvk, pd, ('A' if f == 'B' else 'B')) else: spiblock += [[li, nvk]]; return 0 vk, m = 0, 0while f: u = [i[1] for i in f] if 'A' in u and 'B' in u: f = sorted(f)[::-1]; M = f[0]; f = f[1:] creat_block(f, 1, M[0], ('A' if M[1] == 'B' else 'B')) t = spiblock[-1] f, vk, m = t[0], max(vk, t[1]), m + 1 else: m += len(f); f.clear() print(vk, m)

Осталось ещё 1 шаг

  1. Приведем решение Михаила Зорина на языке…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Обработка целочисленной информации»