Masala #PEFLDUK2TP

Xotira 32 MB Vaqt 1000 ms
14

Upakovka chisel

Tarmoq orqali ma'lumot uzatishda ularni samarali tarzda kodlash muhimdir. Biz raqamlarni dekodlashning samarali usulini tavsiflaymiz. Ushbu usul kodlarni o'zgaruvchan uzunlikda ishlatadi va bu usulni qo'llashda, har bir kod boshqa raqamning prefiksi bo'lmasligi kerak. Sizning vazifangiz — raqamlarni optimallashtirilgan tarzda kodlash.


Kiruvchi ma'lumotlar:
  • Kodlashda olingan raqamlar −263 dan 263−1 gacha bo'ladi (bu Java'dagi long, Delphi'dagi int64, C++'dagi __int64 turiga mos keladi).

  • Kodlangan raqamlar 1 dan 9 baytgacha o'zgaruvchan uzunlikda bo'ladi.

  • Dastlabki baytni tekshirishdan boshlanadi. Agar baytda barcha bitlar 1 bo'lsa (0xff), q=8 deb belgilanadi va bu 8 baytlik standart formatda kodlashni bildiradi.

  • Agar baytda 1-lar bilan to'ldirilgan bo'lsa, bu baytni 0xff bilan to'ldirish yoki nol bilan to'ldirish kabi qo'shimcha usullar mavjud.


Chiquvchi ma'lumotlar:

Har bir raqamni kodlash va uni hex formatida chiqarish kerak.


Misollar
# input.txt output.txt
1
9
0
1
2
3
100
500
1000000
-1
-100
00
01
02
03
8064
81f4
cf4240
7f
bf9c
Izoh:
  • Dastlabki baytni tekshirib, qadar bo'lgan 1-larni sanash.
  • Qolgan baytlarni to'g'ri tarzda formatlash.
  • Natijani hexadecimal (16-lik) formatda chiqarish.