Каждое изделие, изготовленное на предприятии, получает уникальный код, состоящий из \(30\) символов. Каждый символ кода может быть латинской буквой (заглавной или строчной), десятичной цифрой или специальным символом из особого технического набора. В базе данных хранится список всех уже использованных кодов. При этом используется посимвольное кодирование, каждый символ кодируется одинаковым минимально возможным числом бит, а для хранения каждого кода отводится одинаковое минимально возможное число байт. Известно, что для хранения списка из \(5200\) кодов выделено не более \(150\) Кбайт. Какое наибольшее количество специальных символов может входить в особый технический набор?
Решение:
Пусть специальных символов \(N.\) Тогда для формирования кода используется \(10 + 52 + N\) символов. Каждый такой символ кодируется тогда минимум \(\lceil \log_2 (10 + 52 + N) \rceil\) битами, а на один код будет выделено как минимум \(\left\lceil \cfrac{30 \cdot \lceil \log_2 (10 + 52 + N) \rceil}{8} \right \rceil\) байт. Учитывая, что \(5200\) таких кодов занимают не более \(150\) Кбайт, получаем следующее ограничение $$5200 \cdot \left\lceil \cfrac{30 \cdot \lceil \log_2 (10 + 52 + N) \rceil}{8} \right \rceil \leqslant 150 \cdot 2^{10}.$$ Максимальное \(N,\) удовлетворяющее этому условию, легко найти программно:
Python
from math import ceil, log2
for N in range(100_000, 0, -1):
if 5200 * ceil(30 * ceil(log2(10 + 52 + N)) / 8) <= 150 * 2**10:
print(N)
break
Ответ: \(66\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене