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

На пред­при­я­тии каж­дой из­го­тов­лен­ной де­та­ли при­сва­и­ва­ют се­рий­ный номер, со­дер­жа­щий де­ся­тич­ные цифры, 52 ла­тин­ские буквы (с учётом ре­ги­стра) и сим­во­лы из 963⁠-⁠сим­воль­но­го спе­ци­аль­но­го ал­фа­ви­та. В базе дан­ных для хра­не­ния каж­до­го се­рий­но­го но­ме­ра от­ве­де­но оди­на­ко­вое и ми­ни­маль­но воз­мож­ное число байт. При этом ис­поль­зу­ет­ся по­сим­воль­ное ко­ди­ро­ва­ние се­рий­ных но­ме­ров, все сим­во­лы ко­ди­ру­ют­ся оди­на­ко­вым и ми­ни­маль­но воз­мож­ным чис­лом бит. Из­вест­но, что для хра­не­ния 2000 се­рий­ных но­ме­ров от­ве­де­но не более 693 Кбайт па­мя­ти. Опре­де­ли­те мак­си­маль­но воз­мож­ную длину се­рий­но­го но­ме­ра. В от­ве­те за­пи­ши­те толь­ко целое число.

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

Ре­ше­ние.

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

Для ко­ди­ро­ва­ния се­рий­но­го но­ме­ра, ис­поль­зу­ю­щей де­ся­тич­ные цифры, 52 ла­тин­ские буквы (с учётом ре­ги­стра) и сим­во­лы из 963⁠-⁠сим­воль­но­го спе­ци­аль­но­го ал­фа­ви­та, тре­бу­ет­ся 11 бит (ведь 211 = 2048 ).

Для хра­не­ния се­рий­но­го но­ме­ра тре­бу­ет­ся

x умно­жить на дробь: чис­ли­тель: 11 , зна­ме­на­тель: 8 конец дроби байт.

Для хра­не­ния но­ме­ров по­тре­бо­ва­лось:

 x умно­жить на дробь: чис­ли­тель: 11 , зна­ме­на­тель: 8 конец дроби мень­ше или равно дробь: чис­ли­тель: 693 умно­жить на 1024 , зна­ме­на­тель: 2000 конец дроби байт.

Так как для хра­не­ния каж­до­го се­рий­но­го но­ме­ра от­ве­де­но оди­на­ко­вое и ми­ни­маль­но воз­мож­ное число байт:

 x умно­жить на дробь: чис­ли­тель: 11 , зна­ме­на­тель: 8 конец дроби мень­ше или равно 354 байт.

 x мень­ше или равно дробь: чис­ли­тель: 8 , зна­ме­на­тель: 11 конец дроби умно­жить на 354.

 x мень­ше или равно 257 .

Мак­си­маль­ная воз­мож­ная длина се­рий­но­го но­ме­ра 257.

 

 

Ответ: 257.

 

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

m = 10+52+963 # мощ­ность ал­фа­ви­та

k = 1

while 2**k < m: k += 1 # ко­ли­че­ство бит в коде сим­во­ла

for l in range(10000,1,-1): # l - длина се­рий­но­го но­ме­ра

bits = l*k # сколь­ко бит в се­рий­ном но­ме­ре

bytes = bits//8

if bits%8 != 0: bytes += 1 # сколь­ко бай­тов в се­рий­ном но­ме­ре

if bytes*2000 <= 693*1024: # если 2000 се­рий­ных но­ме­ров по­ме­ща­ют­ся в 693К

print(l)

break

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ−2025 по ин­фор­ма­ти­ке