Rànking de tennis (1) Z99038


Statement
 

pdf   zip   main.cc

En el tennis professional, les classificacions de l’ATP i la WTA ordenen els jugadors i jugadores pels punts acumulats durant la temporada. Cada torneig atorga una certa quantitat de punts als participants, i la classificació es calcula sumant tots els punts guanyats (o restant els perduts) al llarg de l’any.

Feu un programa que, donada una llista de jugadors i una seqüència d’actualitzacions de punts, mostri la classificació final ordenada de més a menys punts.

Per facilitar la lectura de l’entrada, es disposa d’una funció llegeix_jugador al fitxer main.cc descarregable, que llegeix una línia de la primera part de l’entrada i retorna el codi i el nom del jugador:

// Llegeix un jugador de l'entrada.
// Retorna cert si s'ha llegit correctament, fals si s'ha arribat a "---".
bool llegeix_jugador(string& codi, string& nom);

Observació

En aquest problema el centre d’interès és l’eficiència. Cal trobar una forma intel·ligent d’emmagatzemar els jugadors per poder actualitzar els seus punts sense fer cerques innecessàries.

Com que el problema és de tipus G++17, cal enviar un sol fitxer .cc amb tot el programa. Es pot fer servir el main.cc proporcionat com a base.

Entrada

L’entrada té dues parts, separades per una línia amb ---.

La primera part conté la llista de jugadors, un per línia. Cada línia té un codi de 6 caràcters (lletres majúscules i dígits), seguit d’un espai i el nom del jugador (que pot contenir espais) fins al final de línia.

La segona part conté una seqüència de parelles codi punts, una per línia, on codi és el codi d’un jugador de la primera part i punts és un enter amb signe (+N o -N) que indica els punts guanyats o perduts. La seqüència acaba amb fi d’entrada.

Sortida

La classificació final, amb un jugador per línia, en format:

posició. Nom del Jugador - punts

ordenada de més a menys punts. Si un grup de jugadors té els mateixos punts, s’ordenen per nom. La posició comença en 1.

Public test cases
  • Input

    FED001 Roger Federer
    NAD002 Rafa Nadal
    ALC003 Carlos Alcaraz
    DJO004 Novak Djokovic
    SIN005 Jannik Sinner
    ---
    ALC003 +500
    FED001 +300
    NAD002 +450
    DJO004 +800
    SIN005 +600
    ALC003 +200
    FED001 +350
    NAD002 -100
    DJO004 +150
    SIN005 +250
    

    Output

    1. Novak Djokovic - 950
    2. Jannik Sinner - 850
    3. Carlos Alcaraz - 700
    4. Roger Federer - 650
    5. Rafa Nadal - 350
    
  • Input

    GAU001 Paula Garcia Ruiz
    MOR002 Anna Moreno
    ---
    GAU001 +100
    MOR002 +200
    GAU001 +150
    MOR002 +50
    GAU001 +75
    

    Output

    1. Paula Garcia Ruiz - 325
    2. Anna Moreno - 250
    
  • Input

    RUB001 Elena Rybakina
    SAB002 Aryna Sabalenka
    SWI003 Iga Swiatek
    PEG004 Jessica Pegula
    ---
    SWI003 +400
    SAB002 +300
    RUB001 +200
    PEG004 +400
    SAB002 +100
    RUB001 +200
    

    Output

    1. Aryna Sabalenka - 400
    2. Elena Rybakina - 400
    3. Iga Swiatek - 400
    4. Jessica Pegula - 400
    
  • Information
    Author
    Pau Fernández
    Language
    Catalan
    Other languages
    Spanish
    Official solutions
    C++
    User solutions
    C++