Duplicació dels elements majors i eliminació dels elements menors que l'anterior d'una llista doblement encadenada, circular i amb fantasma X66861


Statement
 

pdf   zip   tar

Donada la classe LlistaLlista que permet guardar seqüències d’enters amb una llista doblement encadenada, circular i amb fantasma, cal implementar el mètode

void duplica_majors_elimina_menors()

que duplica els elements majors que l’anterior i elimina els elements menors que l’anterior del p.i. El primer element i els iguals a l’anterior no es dupliquen ni s’eliminen.

Cal enviar a jutge.org només la implementació del mètode duplica_majors_elimina_menorsduplica\_majors\_elimina\_menors. La classe LlistaLlista té la següent especificació:

#include <vector>
#include <cstddef>
using namespace std;
typedef unsigned int nat;

class Llista {
  // Llista doblement encadenada, circular i amb fantasma.
  private:
    struct node {
      int info;  // Informació del node
      node *seg; // Punter al següent element
      node *ant; // Punter a l'anterior element
    };
    node *_prim; // Punter a l'element fantasma
    nat _long;   // Nombre d'elements

  public:
    Llista();
    // Pre: True
    // Post: El p.i. és una llista buida.

    Llista(const vector<int> &v);
    // Pre: True
    // Post: El p.i. conté els elements de v amb el mateix ordre.

    ~Llista();
    // Post: Destrueix els elements del p.i.

    nat longitud() const;
    // Pre: True
    // Post: Retorna el nombre d'elements del p.i.

    void mostra() const;
    // Pre: True
    // Post: Mostra el p.i. pel canal estàndard de sortida.

    void mostra_invertida() const;
    // Pre: True
    // Post: Mostra el p.i. en ordre invers pel canal estàndard de sortida.

    void duplica_majors_elimina_menors();
    // Pre: True
    // Post: S'han duplicat els elements majors que l'anterior i
    //       s'han eliminat els elements menors que l'anterior del p.i.
    //       El primer element i els iguals a l'anterior no es dupliquen ni s'eliminen.
    //       Exemple: [2 5 3 4 1 1] = > [2 5 5 4 4 1]
};

Per testejar la solució, jutge.org ja té implementats la resta de mètodes de la classe LlistaLlista i un programa principal que processa línies d’enters amb els que crea llistes i desprès crida el mètode duplica_majors_elimina_menorsduplica\_majors\_elimina\_menors.

Entrada

L’entrada conté vàries línies formades per seqüències d’enters. Cadascuna d’elles són els elements que tindrà cada llista.

Sortida

Per a cada línia d’entrada, escriu una línia amb el resultat desprès d’haver duplicat els elements majors que l’anterior i eliminat els elements menors que l’anterior: El nombre d’elements de la llista seguit d’un espai, els elements de la llista entre claudàtors i separats per espais, i finalment aquests mateixos elements però amb ordre invers, també entre claudàtors i separats per espais.

Observació

Cal enviar la solució (el fitxer solution.cppsolution.cpp) comprimida en un fitxer .tar.tar:

tar cvf solution.tar solution.cpp

Només cal enviar la implementació del mètode duplica_majors_elimina_menorsduplica\_majors\_elimina\_menors. Segueix estrictament la definició de la classe de l’enunciat.

Public test cases
  • Input

    2 5 3 4 1 1
    

    Output

    6 [2 5 5 4 4 1] [1 4 4 5 5 2]
    
  • Input

    0 2 3 4 6 9
    0 2 3 3 6 9
    0 2 3 3 3 9
    0 2 3 3 3 3
    

    Output

    11 [0 2 2 3 3 4 4 6 6 9 9] [9 9 6 6 4 4 3 3 2 2 0]
    10 [0 2 2 3 3 3 6 6 9 9] [9 9 6 6 3 3 3 2 2 0]
    9 [0 2 2 3 3 3 3 9 9] [9 9 3 3 3 3 2 2 0]
    8 [0 2 2 3 3 3 3 3] [3 3 3 3 3 2 2 0]
    
  • Input

    9 8 7 4 3 1
    9 8 7 7 3 1
    9 8 7 7 7 1
    9 8 7 7 7 7
    

    Output

    1 [9] [9]
    2 [9 7] [7 9]
    3 [9 7 7] [7 7 9]
    4 [9 7 7 7] [7 7 7 9]
    
  • Input

    
            
                                

    Output

    0 [] []
    
  • Input

    3
    -3
    

    Output

    1 [3] [3]
    1 [-3] [-3]
    
  • Input

    0 1
    0 -1
    0 0
    

    Output

    3 [0 1 1] [1 1 0]
    1 [0] [0]
    2 [0 0] [0 0]
    
  • Information
    Author
    Jordi Esteve
    Language
    Catalan
    Official solutions
    Make
    User solutions
    Make