Cal implementar la següent classe cj_enters que ens permet representar i manipular conjunts d’enters (no importa l’ordre dels enters i no poden haver-hi enters repetits):
Bàsicament el que cal fer és:
Cal enviar la solució (els fitxers cj_enters.rep i cj_enters.cpp) comprimida en un sol fitxer .tar
Per testejar la classe disposeu d’un programa principal que processa blocs que contenen dos conjunts A i B i vàries comandes que els manipulen.
Entrada
L’entrada conté varis blocs separats per línies amb 10 guions (———–). Cada bloc consisteix en dues seqüències d’enters, una per línia, cadascuna d’elles són els elements que tindran originalment el conjunt A i el conjunt B. A continuació segueixen vàries comandes, una per línea, amb el següent format:
On cjt1 i cjt2 poden ser ’A’ o ’B’.
Sortida
Per a cada línia d’entrada, escriu una línia amb el resultat:
Observació
Aquest problema proporciona la definició pública de la classe cj_enters dins del fitxer cj_enters.hpp, el programa principal main.cpp i un fitxer Makefile per facilitar la compilació.
Per implementar el conjunt no es poden usar les classes stack, queue, list o set de la STL.
Pots fer un parell de versions, una implementada amb memòria estàtica (usant per exemple arrays de C++) i una altra implementada amb memòria dinàmica. Si la versió amb memòria estàtica té un límit en el màxim nombre d’element d’un conjunt, segurament no passarà els jocs de prova privats on hi ha casos amb conjunts molt grans.
Si els mètodes d’unir, intersectar, restar, igualtat i diferència no es programen de forma eficient (cost lineal) tampoc passaran els jocs de prova privats degut a un excés de temps d’execució.
Input
1 conte A 0 conte A 1 conte B 0 conte B 1 max B min B card A card B ---------- 4 -8 12 -6 14 0 1 -5 13 12 -8 conte A 0 conte A 1 conte B 0 conte B 1 max A min A max B min B card A card B
Output
[] [1] conte A 0: 0 conte A 1: 0 conte B 0: 0 conte B 1: 1 max B: 1 min B: 1 card A: 0 card B: 1 ---------- [-8 -6 0 4 12 14] [-8 -5 1 12 13] conte A 0: 1 conte A 1: 0 conte B 0: 0 conte B 1: 1 max A: 14 min A: -8 max B: 13 min B: -8 card A: 6 card B: 5
Input
1 insereix B 1 conte B 0 conte B 1 max B min B card B insereix B 0 conte B 0 conte B 1 max B min B card B + A A * A A - A A == A A != A A + B B * B B - B B == B B != B B + A B * A B - A B - B A == A B != A B unir A B intersectar A B restar A B ---------- 4 -8 12 -6 14 0 1 -5 13 12 -8 + A A * A A - A A == A A != A A + B B * B B - B B == B B != B B + A B * A B - A B - B A == A B != A B unir A B intersectar A B restar A B ---------- 4 -8 12 12 -8 4 == A B != A B
Output
[] [1] insereix B 1: [1] conte B 0: 0 conte B 1: 1 max B: 1 min B: 1 card B: 1 insereix B 0: [0 1] conte B 0: 1 conte B 1: 1 max B: 1 min B: 0 card B: 2 + A A: [] * A A: [] - A A: [] == A A: 1 != A A: 0 + B B: [0 1] * B B: [0 1] - B B: [] == B B: 1 != B B: 0 + A B: [0 1] * A B: [] - A B: [] - B A: [0 1] == A B: 0 != A B: 1 unir A B: [0 1] intersectar A B: [0 1] restar A B: [] ---------- [-8 -6 0 4 12 14] [-8 -5 1 12 13] + A A: [-8 -6 0 4 12 14] * A A: [-8 -6 0 4 12 14] - A A: [] == A A: 1 != A A: 0 + B B: [-8 -5 1 12 13] * B B: [-8 -5 1 12 13] - B B: [] == B B: 1 != B B: 0 + A B: [-8 -6 -5 0 1 4 12 13 14] * A B: [-8 12] - A B: [-6 0 4 14] - B A: [-5 1 13] == A B: 0 != A B: 1 unir A B: [-8 -6 -5 0 1 4 12 13 14] intersectar A B: [-8 -5 1 12 13] restar A B: [] ---------- [-8 4 12] [-8 4 12] == A B: 1 != A B: 0