Информатика. ЕГЭ
Задания для подготовки
Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников
Задание 11. Информатика. ЕГЭ. Статград. Профиль. 12.05.2025-1
- Просмотры: 1749
- Изменено: 13 мая 2025
Для передачи зашифрованных сообщений используется специальный алфавит из \(1800\) символов. Сообщения передаются двоичным кодом, при этом используется равномерное посимвольное кодирование, каждый символ кодируется одинаковым для всех символов минимальным числом бит, а сообщение в целом – минимально возможным числом байт. Затем подсчитывается контрольная сумма, равная количеству единиц в зашифрованном сообщении. Эта сумма переводится в двоичный код и дописывается в конец сообщения. Контрольная сумма содержит одинаковое для всех сообщений целое число байт. Суммарный размер сообщения при передаче должен быть не более \(1\) Кбайт. Какое наибольшее количество символов может входить в одно сообщение?
Решение:
Для кодирования одного символа потребуется минимум \(\lceil \log_2 1800 \rceil = 11\) бит. Алфавит можно закодировать так, что в двоичном коде каждого символа присутствует максимум \(7\) единиц: среди одиннадацатибитных кодов только один состоит из \(11\) единиц. С десятью единицами имеется всего \(C_{11}^{10} = 11\) кодов, с \(9\)-ю — \(C_{11}^{9} = 55,\) а с \(8\)-ю — \(C_{11}^{8} = 165.\) Итого \(1 + 11 + 55 + 165 = 232\) кода. Остаётся \(2048 - 232 = 1816\) что достаточно для кодирования алфавита из \(1800\) символов.
Пусть сообщение состоит из \(N\) символов. Тогда его длина в байтах равна \(\left\lceil \cfrac{11 N}{8} \right\rceil .\) Количество единиц в таком сообщении максимум \(7N\). Для его записи потребуется $$\left\lceil \frac{\lceil \log_2 (7 N) \rceil}{8} \right\rceil$$ байт. Т.о. получаем следующее неравенство $$\left\lceil \frac{11 N}{8} \right\rceil + \left\lceil \frac{\lceil \log_2 (7 N) \rceil}{8} \right\rceil \leqslant 1024,$$ которое мы решим программно:
Python
from math import ceil, log2
def len_msg(N):
return ceil(11 * N / 8) + ceil(ceil(log2(7 * N)) / 8)
print(max(N for N in range(1, 1_000) if len_msg(N) <= 1024))
Ответ: \(743\)
Обсуждение задания
Здесь пока нет ни одного комментария. Будьте первым!


