Heu d’implementar un programa que manegui un conjunt de persones, i cuantes monedes té cada persona. El conjunt està inicialment buit. Tindrem instruccions per afegir una persona al conjunt i una indicació de cuantes monedes té. També tindrem instruccions per a eliminar una persona del conjunt. I també tindrem instruccions que ens demanen que escrivim per la sortida cuantes persones hi ha en un moment donat en el conjunt amb una certa cuantitat de monedes fixada. Fixeu-vos en la descripció de l’entrada i la sortida d’aquest exercici per a veure’n els detalls.
Observació: Podeu seguir l’enfoc que considereu oportú, i podeu utilitzar qualsevol de les estructures de dades presentades al curs (string, vector, stack, queue, list, map) de la manera que considereu oportuna. Però tingueu en compte que la vostra elecció pot afectar a l’eficiència de la vostra solució, i per tant al fet de poder superar tots els jocs de proves o només els públics (cosa que us deixarà amb la meitat de la nota).
Entrada
Cada linia de l’entrada consisteix en una instrucció del següent tipus, a on name és un string no buit qualsevol de menys de 20 caràcters, i numcoins és un natural positiu qualsevol que cap en una variable de tipus int:
La instrucció ADD name numcoins ens demana que afegim algú anomenat name al conjunt, i que aquesta persona nova té numcoins monedes.
La instrucció DELETE name ens demana que eliminem algú anomenat name del conjunt.
La instrucció NUMPEOPLE numcoins ens demana que escrivim per la sortida el nombre actual de persones del conjunt que tenen exactament numcoins monedes.
Podem suposar que les entrades son tals que els noms de persones s’utilitzen com a molt un cop i de forma coherent, és a dir: donat un name concret, podem suposar que hi haurà com a molt una instrucció ADD name numcoins i com a molt una instrucció DELETE name. A més a més, si apareix una instrucció DELETE name, necessàriament haurà aparegut abans un ADD name numcoins amb el mateix name.
Sortida
Per a cada instrucció NUMPEOPLE numcoins, s’escriurà una línia per la sortida amb el nombre actual de persones que tenen numcoins monedes.
Observació
Avaluació sobre 10 punts:
Entenem com a solució ràpida una que és correcta, de cost nlog(n) o inferior, i capaç de superar els jocs de proves públics i privats. Entenem com a solució lenta una que no és ràpida, però és correcta i capaç de superar els jocs de proves públics.
Input
NUMPEOPLE 10 NUMPEOPLE 15 ADD laura 46 ADD david 46 ADD sonia 46 DELETE laura ADD carles 46 ADD sandra 10 ADD joel 15 DELETE sonia ADD nuria 46 NUMPEOPLE 15 ADD hector 15 NUMPEOPLE 46 ADD merce 46 ADD oscar 15 NUMPEOPLE 15 DELETE joel DELETE merce DELETE hector NUMPEOPLE 46 DELETE oscar DELETE david DELETE carles DELETE sandra NUMPEOPLE 10 NUMPEOPLE 46 DELETE nuria NUMPEOPLE 46
Output
0 0 1 3 3 3 0 1 0