Fusió de K Llistes Ordenades S84123


Statement
 

pdf   zip   tar

Donades KK llistes d’enters, cadascuna ordenada en ordre descendent, cal fusionar-les totes en una sola llista, també en ordre descendent.

L’estratègia consisteix a fer servir un max-heap que emmagatzema parells (valor, índex de llista). Inicialment, s’insereix el primer element de cada llista al heap juntament amb l’índex de la llista d’on prové. A cada pas, s’extreu el màxim del heap, s’afegeix al resultat, i s’insereix el següent element de la mateixa llista (si n’hi ha). D’aquesta manera, el heap sempre conté com a màxim KK elements i el procés és eficient.

Fes una funció amb la capçalera

/**
 * @brief Fusiona K llistes ordenades descendentment en una sola
 * llista ordenada descendentment.
 *
 * @param llistes Vector de K llistes, cadascuna ordenada
 * descendentment.
 * @pre Cada llista de `llistes` està ordenada en ordre descendent.
 * @post Retorna una llista amb tots els elements de totes les
 * llistes, ordenada descendentment.
 */
list<int> fusiona_llistes(
    const vector<list<int>>& llistes
);

Entrada

La primera línia conté un enter KK (el nombre de llistes). A continuació hi ha KK línies, cadascuna amb una llista no buida d’enters en ordre descendent, separats per espais.

Sortida

Una sola línia amb tots els enters fusionats en ordre descendent, separats per espais.

Observació

Als fitxers públics (icona del gatet) trobaràs: main.cc (el programa principal, amb l’entrada/sortida feta), fusio.cc (a on has d’implementar la funció), heap.hh, assert.hh i un Makefile.

Has d’implementar fusiona_llistes al fitxer fusio.cc i enviar només aquest fitxer.

Public test cases
  • Input

    3
    10 7 3 1
    9 5 2
    8 6 4
    

    Output

    10 9 8 7 6 5 4 3 2 1
    
  • Input

    2
    15 10 5
    12 8 3 1
    

    Output

    15 12 10 8 5 3 1
    
  • Information
    Author
    Pau Fernández
    Language
    Catalan
    Other languages
    Spanish
    Official solutions
    C++
    User solutions
    C++