Задание 11. Информатика. ЕГЭ. Статград. 28.01.2025-2

Просмотры: 422
Изменено: 3 февраля 2025

Предприятие выпускает партии изделий. Каждая партия получает уникальный код из \(17\) символов. Каждый символ кода может быть любой строчной или заглавной латинской буквой. Все изделия в партии получают последовательные номера от \(1\) до общего числа изделий в партии. Запись о каждом изделии заносится в информационную систему. Запись содержит код изделия и некоторую дополнительную информацию. Код изделия состоит из кода партии и номера изделия в партии. Для записи кода партии используется посимвольное кодирование, каждый символ кодируется одинаковым минимально возможным количеством битов. Номер изделия записывается как двоичное целое число, для записи каждого номера используется одинаковое минимально возможное количество битов. Для записи кода изделия в целом используется минимально возможное целое количество байтов. Для записи дополнительной информации о каждом изделии требуется 50 байт.

Известно, что для хранения информации обо всех изделиях одной партии используется не более 90 Кбайт. Какое наибольшее количество изделий может быть в партии?

Решение:

В латинском алфавите \(26\) букв. Так как \(2^5 < 52 < 2^6,\) то для кодирования строчных и заглавных букв этого алфавите требуется минимум \(6\) бит. Всего, для кода партии необходимо \(17 \cdot 6\) бит. Пусть для записи номера изделия в партии используется \(N\) бит. Минимальное количество байт, необходимое для кодирования партии и номера изделия в этой партии определится как $$\left\lceil \frac{17 \cdot 6 + N}{8} \right\rceil.$$ Всего в партии будет максимум \(2^N - 1\) изделий. Для решения поставленной задачи найдём максимальный \(N,\) для которого выполняется соотношение $$\left\lceil \frac{17 \cdot 6 + N}{8} \right\rceil \cdot (2^N - 1)+ 50 \leqslant 90 \cdot 2^{10}.$$ Тогда максимальное количество изделий в партии будет \(2^N - 1.\) Проще всего найти \(N\) перебором программно.

Python


from math import ceil

N = 1
while ceil((17 * 6 + N) / 8) * (2**N - 1) + 50 <= 90 * 2**10:
    N += 1
print(2**(N-1) - 1)

Ответ: \(4095\)