Per resoldre aquest problema heu de completar el codi que trobareu al final de l’enunciat. Hi heu de reemplaçar cada ??? per una o més línies de codi. No canvieu res més. Descarregueu-vos de la web del problema el fitxer code.cc amb el codi a completar (cliqueu el botó “.CPP” corresponent), editeu-lo i envieu-lo al jutge.
Un historiador manté una base de dades amb diverses efemèrides. Per a cadascuna, en guarda la data, una petita descripció, i un nombre que n’indica la rellevància. Les dates només inclouen el mes i el dia (en aquest ordre), però no l’any. A més, el sistema només permet guardar una efemèride per a cada data.
El programa de l’historiador permet fer cinc operacions diferents:
n: Escriu el nombre d’efemèrides emmagatzemades
precedit de “number events:”.
s
:
Guarda que el dia
es va produir l’efemèride
,
la qual té rellevància
.
Escriu un missatge d’error si ja hi havia guardada una efemèride
corresponent al dia
.
a
:
Pregunta les dades de l’efemèride de la data
.
Es garanteix que hi ha una efemèride emmagatzemada per a aquesta
data.
m: Mostra la màxima rellevància de les efemèrides
guardades, precedida de “maximum relevance:”. Si encara no
hi ha cap efemèride, escriu 0.
e: Escriu la suma de les rellevàncies de les
efemèrides de la primera data i de l’última data (en ordre cronològic;
la comparació directa entre strings ja funciona bé). Escriu un missatge
d’error si hi ha menys de dues dates emmagatzemades.
L’entrada consisteix en diverses operacions segons s’ha indicat
anteriorment. Les dates usen dos dígits per als mesos i els dies, i una
‘/’ per separar-les. Les descripcions són strings amb
minúscules, dígits i guions. Les rellevàncies són enters entre 1 i
.
Per a cada operació (excepte les de guardar), escriviu la informació demanada.
#include <iostream>
#include <map>
using namespace std;
struct Data {
string event;
int relevance;
};
int main() {
int maximum_relevance = 0;
map<string, Data> M;
char c;
while (cin >> c) {
if (c == 'n') {
???
}
else if (c == 's') {
string date, event;
int relevance;
cin >> date >> event >> relevance;
???
}
else if (c == 'a') {
string date;
cin >> date;
???
}
else if (c == 'm') {
???
}
else { // c == 'e'
???
}
}
}
Input
n m s 05/20 barca-champions-league 200 a 05/20 e s 11/20 franco-death 700 m s 09/11 fall-of-barcelona 1000 e m s 09/11 september-11-attacks 1001 n m a 09/11
Output
number events: 0 maximum relevance: 0 barca-champions-league ERROR: at least two events needed maximum relevance: 700 900 maximum relevance: 1000 ERROR: repeated date number events: 3 maximum relevance: 1000 fall-of-barcelona