Задания
Версия для печати и копирования в MS Word
Тип 11 № 76708
i

Для пе­ре­да­чи за­шиф­ро­ван­ных со­об­ще­ний ис­поль­зу­ет­ся спе­ци­аль­ный ал­фа­вит из 400 сим­во­лов. Со­об­ще­ния пе­ре­да­ют­ся дво­ич­ным кодом, при этом ис­поль­зу­ет­ся рав­но­мер­ное по­сим­воль­ное ко­ди­ро­ва­ние, каж­дый сим­вол ко­ди­ру­ет­ся оди­на­ко­вым для всех сим­во­лов ми­ни­маль­ным чис­лом бит, а со­об­ще­ние в целом  — ми­ни­маль­но воз­мож­ным чис­лом байт.

При пе­ре­да­че со­об­ще­ние де­лит­ся на груп­пы раз­ме­ром не более 9 байт и к каж­дой такой груп­пе до­бав­ля­ет­ся за­го­ло­вок из 1 байта.

Сум­мар­ный раз­мер со­об­ще­ния при пе­ре­да­че дол­жен быть не более 1 Кбайт. Какое наи­боль­шее ко­ли­че­ство сим­во­лов может вхо­дить в одно со­об­ще­ние?

Спрятать решение

Ре­ше­ние.

За­ме­тим, что k бит поз­во­ля­ют ко­ди­ро­вать 2k сим­во­лов.

Для ко­ди­ро­ва­ния сим­во­лов тре­бу­ет­ся 9 бит (ведь 29  =  512).

Обо­зна­чим х ко­ли­че­ство сим­во­лов в со­об­ще­нии.

округ­ле­ние вверх(х · 9 / 8 · 9) + округ­ле­ние вверх(х · 9 / 8) <= 1024.

округ­ле­ние вверх(х / 8) + 9 ·  x <= 1024 ·  8.

 

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

from math import ceil

for x in range(1,1000):

b = 9*x+8*ceil(x/8)

if b <= 1024*8:

ans = x

print(ans)

 

Наи­боль­шее ко­ли­че­ство сим­во­лов ко­то­рое может вхо­дить в одно со­об­ще­ние 818.

 

Ответ: 818.

 

При­ведём ре­ше­ние Алек­сандра Та­ра­со­ва на языке Python.

from math import log2, ceil

i = int(ceil(log2(400))) # ин­фор­ма­ци­он­ный вес сим­во­ла

for x in range(700,1000): # про­ме­жу­ток в ко­то­ром наход. отв.

s = ceil(x*i/8)# кол-во. бай­тов в со­об­ще­нии

d = ceil(s/9)# кол. допол. бай­тов

if s+d <= 1024:

ans = x

else:

break

print(ans)