Ranking de tenis (1) Z99038


Statement
 

pdf   zip   main.cc

En el tenis profesional, las clasificaciones de la ATP y la WTA ordenan a los jugadores y jugadoras por los puntos acumulados durante la temporada. Cada torneo otorga una cierta cantidad de puntos a los participantes, y la clasificación se calcula sumando todos los puntos ganados (o restando los perdidos) a lo largo del año.

Haced un programa que, dada una lista de jugadores y una secuencia de actualizaciones de puntos, muestre la clasificación final ordenada de más a menos puntos.

Para facilitar la lectura de la entrada, se dispone de una función llegeix_jugador en el fichero main.cc descargable, que lee una línea de la primera parte de la entrada y devuelve el código y el nombre del jugador:

// Lee un jugador de la entrada.
// Devuelve cierto si se ha leído correctamente, falso si se ha llegado a "---".
bool llegeix_jugador(string& codi, string& nom);

Observación

En este problema el centro de interés es la eficiencia. Hay que encontrar una forma inteligente de almacenar los jugadores para poder actualizar sus puntos sin hacer búsquedas innecesarias.

Como el problema es de tipo G++17, hay que enviar un solo fichero .cc con todo el programa. Se puede usar el main.cc proporcionado como base.

Entrada

La entrada tiene dos partes, separadas por una línea con ---.

La primera parte contiene la lista de jugadores, uno por línea. Cada línea tiene un código de 6 caracteres (letras mayúsculas y dígitos), seguido de un espacio y el nombre del jugador (que puede contener espacios) hasta el final de línea.

La segunda parte contiene una secuencia de parejas código puntos, una por línea, donde código es el código de un jugador de la primera parte y puntos es un entero con signo (+N o -N) que indica los puntos ganados o perdidos. La secuencia acaba con fin de entrada.

Salida

La clasificación final, con un jugador por línea, en formato:

posición. Nombre del Jugador - puntos

ordenada de más a menos puntos. Si un grupo de jugadores tiene los mismos puntos, se ordenan por nombre. La posición empieza 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
    Spanish
    Translator
    Pau Fernández
    Original language
    Catalan
    Other languages
    Catalan
    Official solutions
    C++
    User solutions
    C++