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