Mètode de Queue que duplica només els elements que pertanyen a un set S59319


Statement
 

pdf   zip   tar

Donada la classe Queue<T> implementada amb una llista simplement encadenada, fes el mètode RECURSIU:

void duplicate(const set<T>& s);

Aquest mètode duplica cada element de la cua que pertanyi a s, és a dir, ha d’aparèixer dues vegades consecutives (original i la còpia, adjacents). Els elements que no pertanyen a s no es toquen. Si un element apareix diverses vegades a la cua i pertany a s, totes les seves ocurrències es dupliquen.

Exemple

cua entrada 3 1 4 1 5 9 2 6
set {1, 5, 6}
cua sortida 3 1 1 4 1 1 5 5 9 2 6 6

Què has de lliurar

D’entre els fitxers que s’adjunten en aquest exercici, trobaràs queue.old.hpp, a on hi ha una implementació de la classe genèrica Queue. En primer lloc, hauràs de fer:

cp queue.old.hpp queue.hpp

A continuació si obres el fitxer queue.hpp al final del mateix trobaràs el mètode que has d’implementar:

void duplicate(const set<T>& s);

IMPORTANT: No toquis la resta de la implementació de la classe, excepte si per algun motiu, consideres que necessites afegir algun mètode auxiliar o atribut a la part privada.

D’entre els fitxers que s’adjunten a l’exercici també hi ha program.cpp (programa principal) i Makefile per a compilar i generar l’executable. El programa principal que t’oferim ja s’encarrega de llegir les cues i els sets i fer les crides al mètode indicat. Només cal que implementis el mètode duplicate.

Per a pujar la teva solució, has de crear el fitxer solution.tar així:

tar cf solution.tar queue.hpp

Observacions

  • No es pot usar cap contenidor auxiliar de la STL (vector, stack, queue, …) llevat de set.

  • Has de trobar una solució RECURSIVA i eficient del problema. En particular, no hi hauria d’haver cap bucle en cap dels mètodes que implementis.

  • Hauries d’aconseguir implementar el mètode demanat a base de crear nous nodes. De fet, una solució a base d’usar push i pop potser et permetrà passar els jocs de proves, però atès que la solució ha de ser eficient en temps i espai, aquest tipus de solució serà fortament penalitzat.

  • Recorda que tots els mètodes que implementis han de tenir les corresponents Precondició (Pre) i Postcondició (Post).

  • En les crides recursives inclou la hipòtesi d’inducció (HI) i la funció de fita (FF).

Entrada

L’entrada del programa és una seqüència de cues i sets.

Cada línia descriu un cas de prova amb el format: [e1e2eN]{s1s2sM}[e_1 \; e_2 \; \cdots \; e_N] \quad \{s_1 \; s_2 \; \cdots \; s_M\} on e1eNe_1\ldots e_N són els elements de la cua des del front al back, i s1sMs_1 \ldots s_M són els elements del set (tots diferents).

Sortida

Per cada cas de prova s’escriurà la cua resultant d’aplicar el mètode duplicate. Per escriure les cues, s’ha utilitzat l’operador << que es troba definit en el fitxer queue.hpp.

Public test cases
  • Input

    [3 1 4 1 5 9 2 6] {1 5 6}
    [1 2 3 4 5] {1 2 3 4 5}
    [1 2 3 4 5] {6 7 8}
    [7] {7}
    [7] {3}
    [2 2 3 2 4] {2 4}
    [10 20 30] {1 2 10 30 100 200}
    [] {10 9 8 7 6 5 4 3 2 1 0}
    

    Output

    12 3 1 1 4 1 1 5 5 9 2 6 6
    10 1 1 2 2 3 3 4 4 5 5
    5 1 2 3 4 5
    2 7 7
    1 7
    9 2 2 2 2 3 2 2 4 4
    5 10 10 20 30 30
    0
    
  • Input

    [4 1 9 8 8 5 4 18 3 19 14 2 1 3 7 8 17 20 1 18 7 18 14 8 15 19 9 1 6 14] {2 4 5 7 9 11 15 18}
    [12 20 9 2 15 18 4 13 3 18 10 20 12 19 7 3 2 8 10 3 8] {9 12 13 15}
    [12 12 7 9 3 20 6 18 8 6 15 13 9 18 8] {2 4 5 8 11 13 18 20}
    [11 7 16 13 15 5 9 5 8 18 18 9 19 14 19 13 12 8 5 17 16 3 2 4 5 6 14 20] {13 15 17 20}
    [18 1 4 18 9 11 4 10 14 6 15 1 9 17 6 17 4 10] {1 5 6 10 12 17}
    [16 1 4 12 10 8 2 8 19 3 3 16 3 18 5 5 16 18 6 9] {6 7 8 10 11 13 15 18 20}
    [15 4 8 8 3 11 1 19 18 8 19 8 1 3 2 8 3 2 11 3 17 8 9 16 7 18] {8 16 18 19 20}
    [7 4 4 14 12 14 14 15 2 4 2 13 11 4 8 7 7 18 15 5 14 6 9] {1 2 3 4 8 9 11 15 16 17}
    [14 16 16 7 13 2 6 13 1 13 9 15 10 14 18] {1 2 5 6 7 9 10 12 18 19}
    [2 19 16 17 17 6 2 17 3 6 3] {4 8 13 20}
    

    Output

    42 4 4 1 9 9 8 8 5 5 4 4 18 18 3 19 14 2 2 1 3 7 7 8 17 20 1 18 18 7 7 18 18 14 8 15 15 19 9 9 1 6 14
    26 12 12 20 9 9 2 15 15 18 4 13 13 3 18 10 20 12 12 19 7 3 2 8 10 3 8
    21 12 12 7 9 3 20 20 6 18 18 8 8 6 15 13 13 9 18 18 8 8
    33 11 7 16 13 13 15 15 5 9 5 8 18 18 9 19 14 19 13 13 12 8 5 17 17 16 3 2 4 5 6 14 20 20
    26 18 1 1 4 18 9 11 4 10 10 14 6 6 15 1 1 9 17 17 6 6 17 17 4 10 10
    26 16 1 4 12 10 10 8 8 2 8 8 19 3 3 16 3 18 18 5 5 16 18 18 6 6 9
    37 15 4 8 8 8 8 3 11 1 19 19 18 18 8 8 19 19 8 8 1 3 2 8 8 3 2 11 3 17 8 8 9 16 16 7 18 18
    34 7 4 4 4 4 14 12 14 14 15 15 2 2 4 4 2 2 13 11 11 4 4 8 8 7 7 18 15 15 5 14 6 9 9
    22 14 16 16 7 7 13 2 2 6 6 13 1 1 13 9 9 15 10 10 14 18 18
    11 2 19 16 17 17 6 2 17 3 6 3
    
  • Information
    Author
    Bernardino Casas
    Language
    Catalan
    Official solutions
    Make
    User solutions
    Make