Cal implementar la següent classe cj_2enters que ens permet representar i manipular conjunts de parelles d’enters.
Dins del conjunt no importa l’ordre de les parelles i no poden haver-hi parelles repetides. Dins de cada parella d’enters importa l’ordre dels dos enters i es poden repetir els dos enters. Per exemple (els elements del conjunt estan separats amb espais i la parella d’enters amb una coma):
Bàsicament el que cal fer és:
Cal enviar la solució (els fitxers conjunt_2enters.rep i conjunt_2enters.cpp) comprimida en un sol fitxer .tar
Per testejar la classe disposes 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’ i e1 i e2 són enters.
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_2enters dins del fitxer conjunt_2enters.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 0 conte A 0 0 conte A 1 0 conte B 0 0 conte B 1 0 max B min B card A card B ---------- 4 -8 -6 14 0 1 1 0 -5 13 12 -8 conte A 0 1 conte A 1 0 conte B 0 1 conte B 1 0 max A min A max B min B card A card B
Output
[] [1,0] conte A 0 0: 0 conte A 1 0: 0 conte B 0 0: 0 conte B 1 0: 1 max B: 1,0 min B: 1,0 card A: 0 card B: 1 ---------- [-6,14 0,1 4,-8] [-5,13 1,0 12,-8] conte A 0 1: 1 conte A 1 0: 0 conte B 0 1: 0 conte B 1 0: 1 max A: 4,-8 min A: -6,14 max B: 12,-8 min B: -5,13 card A: 3 card B: 3
Input
1 0 insereix B 1 0 conte B 0 0 conte B 1 0 max B min B card B insereix B 0 0 conte B 0 0 conte B 1 0 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 -6 14 0 1 1 0 -5 13 4 -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 0 12 0 4 -8 == A B != A B
Output
[] [1,0] insereix B 1 0: [1,0] conte B 0 0: 0 conte B 1 0: 1 max B: 1,0 min B: 1,0 card B: 1 insereix B 0 0: [0,0 1,0] conte B 0 0: 1 conte B 1 0: 1 max B: 1,0 min B: 0,0 card B: 2 + A A: [] * A A: [] - A A: [] == A A: 1 != A A: 0 + B B: [0,0 1,0] * B B: [0,0 1,0] - B B: [] == B B: 1 != B B: 0 + A B: [0,0 1,0] * A B: [] - A B: [] - B A: [0,0 1,0] == A B: 0 != A B: 1 unir A B: [0,0 1,0] intersectar A B: [0,0 1,0] restar A B: [] ---------- [-6,14 0,1 4,-8] [-5,13 1,0 4,-8] + A A: [-6,14 0,1 4,-8] * A A: [-6,14 0,1 4,-8] - A A: [] == A A: 1 != A A: 0 + B B: [-5,13 1,0 4,-8] * B B: [-5,13 1,0 4,-8] - B B: [] == B B: 1 != B B: 0 + A B: [-6,14 -5,13 0,1 1,0 4,-8] * A B: [4,-8] - A B: [-6,14 0,1] - B A: [-5,13 1,0] == A B: 0 != A B: 1 unir A B: [-6,14 -5,13 0,1 1,0 4,-8] intersectar A B: [-5,13 1,0 4,-8] restar A B: [] ---------- [4,-8 12,0] [4,-8 12,0] == A B: 1 != A B: 0