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. Periódicamente, se publica una clasificación actualizada que
muestra, además de los puntos, los cambios de posición respecto a la
clasificación anterior: [+N] si el jugador ha subido
N posiciones, [-N] si ha bajado, o
[=] si se mantiene.
Haced un programa que, dada una lista de jugadores con sus puntos actuales y una secuencia de actualizaciones de puntos, muestre la nueva clasificación con los cambios de posición respecto a la anterior.
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, los puntos 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, int& punts);
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.
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, un entero con los puntos actuales del jugador, otro 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.
La nueva clasificación, con un jugador por línea, en formato:
posición. Nombre del Jugador - puntos [cambio]
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. El
cambio es [+N] si el jugador ha subido N
posiciones, [-N] si ha bajado, o [=] si se
mantiene en la misma posición.
Input
FED001 2500 Roger Federer NAD002 2800 Rafa Nadal ALC003 1200 Carlos Alcaraz DJO004 2600 Novak Djokovic SIN005 1800 Jannik Sinner --- FED001 +443 NAD002 -256 ALC003 +1124 DJO004 +150 SIN005 +850
Output
1. Roger Federer - 2943 [+2] 2. Novak Djokovic - 2750 [=] 3. Jannik Sinner - 2650 [+1] 4. Rafa Nadal - 2544 [-3] 5. Carlos Alcaraz - 2324 [=]
Input
GAU001 100 Paula Garcia Ruiz MOR002 200 Anna Moreno --- GAU001 +250 MOR002 +50
Output
1. Paula Garcia Ruiz - 350 [+1] 2. Anna Moreno - 250 [-1]