Cerință
Până nu demult, comunicaţia la distanţă se făcea cu ajutorul telegrafului. Folosind telegraful, se pot transmite două tipuri de semnale: punct şi linie. În general, dorim să transmitem texte formate din litere ale alfabetului latin şi cifre (în total, de simboluri). Trebuie deci să folosim o codificare, adică să asociem fiecăruia din cele de simboluri o succesiune distinctă de linii şi puncte. Pentru a putea decodifica o succesiune recepţionată de linii şi puncte, este necesar ca nici un simbol să nu aibă o codificare identică cu începutul codificării pentru un alt simbol. Să considerăm câteva exemple (presupunând că nu vrem să transmitem decât literele ):
Exemplul 1 | Exemplul 2 | Exemplul 3 |
---|---|---|
A = .. | A = .-- | A = .-.. |
B = .- | B = .- | B = -. |
C = - | C = - | C = .-. |
Exemplul reprezintă o codificare corectă. Exemplul reprezintă o codificare greşită, pentru că începutul codificării pentru este identic cu codificarea pentru (deci, o secvenţă de genul .--
este ambiguă, putând însemna şi şi ). Exemplul este de asemenea o codificare greşită pentru că începutul codificării pentru este identic cu codificarea pentru (o secvenţă precum .-..-.
este ambiguă, putând însemna fie , fie ).
Se ştie că într-o transmisie telegrafică, punctul durează o secundă, iar linia secunde. Putem calcula astfel timpul necesar transmiterii unui text.
Folosind codificarea din exemplul , transmiterea textului CABCA
= - .. .- - ..
durează secunde. Observaţi că lungimea transmisiei se poate calcula şi astfel: .
Se consideră un text, dat prin frecvenţa apariţiei fiecărui simbol (dintre cele 36 considerate). Să se găsească durata minimă necesară transmiterii acelui text, folosind o codificare aleasă corespunzător.
Date de intrare
Fişierul telegraf.in
conţine o singură linie cu de numere întregi nenegative, separate prin câte un spaţiu, reprezentând numărul de apariţii ale fiecărui simbol în textul ce trebuie transmis.
Date de ieşire
Fişierul telegraf.out
va conţine un singur număr, şi anume lungimea minimă (în secunde) necesară pentru transmiterea textului.
Restricții și precizări
- nici unul din cele de simboluri nu apare de mai mult de ori în textul considerat
- există cel puţin două simboluri cu număr de apariţii nenul
- dintre teste vor conţine maxim simboluri cu frecvenţă de apariţie nenulă.
Exemplu
telegraf.in
2 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
telegraf.out
11
Explicație
Se constată că este optim să se transmită acest text folosind codificarea din Exemplul , obţinând o lungime minimă a transmisiei de secunde.