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);
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 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 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.
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