Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2009-12-01 11:10:22.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:huffman.in, huffman.outSursăArhiva Educationala
AutorArhiva EducationalaAdăugată deGavrilaVladGavrila Vlad GavrilaVlad
Timp execuţie pe test0.5 secLimită de memorie65536 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Coduri Huffman

Se dă un alfabet A format din N caractere. Numim cod binar un şir de cifre de 0 şi 1 de o lungime finită. Fie B un şir de coduri binare cu proprietatea că niciun cod Bi nu este prefixul unui alt cod Bj (i ≠ j).

Cerinţă

Ştiindu-se că într-un text T caracterul Ai apare de Vi ori, să se determine un şir B astfel încât înlocuind în textul T fiecare caracter Ai cu codul Bi să se obţină un text T' de lungime minimă L.

Date de intrare

Fişierul de intrare huffman.in va conţine pe prima linie numărul natural N. Pe următoarele N linii se vor afla elementele şirului V, în ordine crescătoare.

Date de ieşire

În fişierul de ieşire huffman.out se va afişa pe prima linie lungimea minima L a textului T'. Pe următoarele N linii se vor afişa elementele şirului B, fiecare cod fiind scris în baza 10.

Restricţii

  • 1 ≤ N ≤ 5 000 000.
  • 1 ≤ Vk ≤ 100 000 000.
  • 1 ≤ L ≤ 1018.
  • Bi ≤ 1018, 1 ≤ i ≤ N.

Exemplu

huffman.inhuffman.out
This is some
text written on
multiple lines.
This is another
text written on
multiple lines.

Explicaţie

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?