Tieni aggiornato il catalogo (Algobadge) 50/100

Salve, sto provando a risolvere il problema “Tieni aggiornato il catalogo”, il codice è molto facile, ma nonostante questo ottengo solo 50/100 punti per Execution timed out, qualche consiglio per ottimizzarlo?

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

vector<long long int> v;
void aggiungi(long long int id) {
    v.push_back(id);
}

void togli(long long int id) {
    v.erase(find(v.begin(), v.end(), id));
}

int conta(long long int id) {
        return count(v.begin(), v.end(), id);
}

Ci sono vari topic a riguardo ad esempio Catalogo Compilazione Fallita

Ciao, io sto facendo lo stesso problema (catalogo) e penso di aver trovato una soluzione, ma ottengo 50/100 perché il case 029 e 031 hanno il risultato sbagliato.

Sto usando ‘map’ perché mi sembra la struttura di dati più adeguata, essendo che posso accedere agli elementi senza l’utilizzo di cicli vari; se usavo un vettore avrei dovuto fare una ricerca lineare ogni volta che cercavo di accedere agli scaffali.

Qui il codice:

using namespace std;
#include <iostream>
#include <map>

map <int, int> M;

void aggiungi(long long int id) {
	if (M[id] == 0) M[id] = 1;
	else M[id]++;
	// M[id] = M[id] == 0 ? 1 : M[id] + 1;
}

void togli(long long int id) {
	M[id] = M[id] - 1;
}

int conta(long long int id) {
	return M[id];
}

Stai usando una mappa con int (32 bit) quando il tipo del problema e’ long long int (64 bit) (in c++ non ti da warning a meno che non abiliti -Wconversion)

La std::map è una buona idea, ma non ci serve avere la struttura ordinata, sarebbe più adatta una std::unordered_map. Queste sono solo piccolezze, comunque il problema era l’overflow.
Se ti interessa, anche nelle mappe puoi usare gli operatori ++ e --: se non esiste nessun elemento alla chiave id con il ++ viene aggiunto con valore 1. Poi per il -- è garantito che non devi togliere da nessuno scaffale vuoto e in questo caso il problema non si pone.

Grazie mille! Dovrei stare più attento alle istruzioni del problema la prossima volta

Grazie! Alla fine ho usato la std::map perché era la prima struttura dati che mi era venuta in mente; avevo provato ad utilizzare la std::unordered_map, ma mi dava problemi con la compilazione e non avevo voglia di rifare il codice anche se corto :P.
Grazie anche per il ++ e il --, lo terrò da conto la prossima volta che userò il C++

1 Mi Piace