Huffman
میخواهیم یک رشته را بهیک کد دودویی تبدیل کنیم. همانطوری که میدانید هر رشته شامل یک سری حرف است که از کنار هم قرار گرفتن آن حرفها رشتهی مورد نظر ما ساخته میشود.
ما برای اینکه رشته را بتوانیم بهیک کد دودویی تبدیل کنیم، باید ابتدا به هر کدام از حرفهای رشتهیک کد دودویی نسبت بدهیم.
کدهای دودویی که ما به حرفها نسبت میدهیم نباید پیشوند یکدیگر باشند (نباید یک کد پیشوند یک کد دیگر باشد) شما باید در این سوال تعداد تکرارهای هر حرف در رشته را از ورودی بخوانید و سپس به حرفها کد نسبت بدهید به طوری که کدهای نسبت داده شده به حرفها صعودی باشد.
به عبارت دیگر، کدی که به حرف $i$ام نسبت داده میشود باید کوچکتر باشد از کدی که به حرف $i+1$ام نسبت داده شده است. از بین تمامی کدهای صعودی، کدی را انتخاب کنید، که طول آن کمینه شود.
ورودی
- در خط اول ورودی عدد $n$ آمده است.
- سپس در خط بعدی $n$ عدد بخوانید که عدد $i$ام نمایانگر تعداد تکرارهای حرف $i$ام در رشته است.
- $n$ حداقل ۲ و حداکثر ۴۰۰ است.
- تمامی اعداد ورودی طبیعی و از ۱۰۰۰,۰۰۰,۰۰۰ تجاوز نمیکنند.
خروجی
خروجی شامل $n$ خط میباشد که در خط $i$ام خروجی، کد نسبت داده شده به حرف $i$ام را چاپ کنید. در صورتی که بیش از یک جواب وجود داشت، یکی از آنها را به دلخواه چاپ کنید.
محدودیتها
- محدودیت زمان: ۱ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
ورودی و خروجی نمونه
| ورودی نمونه | خروجی نمونه |
|---|---|
| 5 1 8 2 3 1 | 00 01 10 110 111 |
پاسخ
منتظر پر کردن این قسمت توسط علاقمندان هستیم.
| ▸ سوال قبل | سوال بعد ◂ |