*Предприятие выпускает партии изделий. Каждая партия получает уникальный код, состоящий из \(25\) заглавных латинских букв. Все изделия в партии получают последовательные номера от \(1\) до общего числа изделий в партии. Запись о каждом изделии заносится в информационную систему. Запись содержит код изделия и некоторую дополнительную информацию. Код изделия состоит из кода партии и номера изделия в партии. Для записи кода партии используется посимвольное кодирование, каждый символ кодируется минимально возможным количеством битов. Номер изделия записывается как целое число, для записи каждого номера используется одинаковое минимально возможное количество битов. Для записи кода изделия в целом используется минимально возможное целое количество байтов. Для записи дополнительной информации о каждом изделии требуется \(60\) байт. Известно, что для хранения информации обо всех изделиях одной партии используется не более \(30\) Кбайт. Какое наибольшее количество изделий может быть в партии?
Решение:
Для кодирования одной из \(26\) букв латинского алфавита требуется минимум \(\lceil \log_2 26 \rceil = 5\) бит. Код партии, состоящий из \(25\) символов, будет кодироваться минимум \(25 \cdot 5\) битами. Пусть для кодирования номера изделия в партии выделено \(p\) бит. Тогда, максимальный номер изделия в партии будет \(N_{max} = 2^p - 1.\) С другой стороны, для записи кода изделия в целом потребуется $$\left\lceil \frac{25 \cdot 5 + p}{8} \right\rceil$$ байт. Пусть в партии \(N\) изделий. Тогда из условия задачи получаем, что $$N \cdot \left\lceil \frac{25 \cdot 5 + p}{8} + 60\right\rceil \leqslant 30 \cdot 2^{10}.$$ Для дальнейшего решения задачи составим программу
Python
from math import ceil, floor
arr = []
for p in range(100, 0, -1):
Nmax = 2**p - 1
N = floor(30 * 2**10 / (ceil((25 * 5 + p) / 8) + 60))
arr.append(min(Nmax, N))
print(max(arr))
Ответ: \(398\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене