Donada la classe Llista que permet guardar seqüències d’enters amb una llista doblement encadenada, sense fantasma i no circular, cal implementar el mètode
que fusiona els elements del paràmetre implícit i de l2 agafant n elements del paràmetre implícit i n elements de l2 alternativament (o els que quedin si n’hi ha menys de n). Al principi del paràmetre implícit s’afegeix un nou element que conté la suma de tots els elements del paràmetre implícit i l2. La llista l2 queda buida.
Per exemple, si inicialment tenim aquestes dues llistes:
p.i. [2 5 3 8 4] l2 [1 6 9]
desprès de cridar fusiona_suma amb n=2, les dues llistes quedaran així:
p.i. [38 2 5 1 6 3 8 9 4] l2 []
Pots veure més exemples en els jocs de prova públics. Cal enviar a jutge.org només la implementació del mètode fusiona_suma. Indica dins d’un comentari a la capçalera del mètode el seu cost en funció del nombre d’elements n1 de la llista del p.i. i nombre d’elements n2 de la llista l2.
Per testejar la solució, jutge.org ja té implementats la resta de mètodes de la classe Llista i un programa principal que processa línies d’enters amb els que crea dues llistes i desprès crida vàries vegades el mètode fusiona_suma amb diferents valors de n.
Entrada
L’entrada conté dues línies formades per seqüències d’enters, són els elements que tindran les dues llistes inicials. A continuació segueix una seqüència d’enters que representen diferents valors de n.
Sortida
Per a cada valor n d’entrada es fusionen i es sumen els elements de les dues llistes inicials agafant alternativament n elements de cadascuna i s’escriu tres línies: El valor n, el contingut de la primera llista i el contingut de la segona llista. Per cada llista s’escriu el nombre d’elements de la llista seguit d’un espai, els elements de la llista entre claudàtors i separats per espais, i finalment aquests mateixos elements però amb ordre invers, també entre claudàtors i separats per espais.
Observació
Cal enviar la solució (el fitxer solution.cpp) comprimida en un fitxer .tar:
tar cvf solution.tar solution.cpp
Només cal enviar la implementació del mètode fusiona_suma i el seu cost en funció del nombre d’elements n1 i n2 de les dues llistes inicials. Segueix estrictament la definició de la classe de l’enunciat.
Input
2 5 3 8 4 1 6 9 1 2 3 4 5 6
Output
1 9 [38 2 1 5 6 3 9 8 4] [4 8 9 3 6 5 1 2 38] 0 [] [] 2 9 [38 2 5 1 6 3 8 9 4] [4 9 8 3 6 1 5 2 38] 0 [] [] 3 9 [38 2 5 3 1 6 9 8 4] [4 8 9 6 1 3 5 2 38] 0 [] [] 4 9 [38 2 5 3 8 1 6 9 4] [4 9 6 1 8 3 5 2 38] 0 [] [] 5 9 [38 2 5 3 8 4 1 6 9] [9 6 1 4 8 3 5 2 38] 0 [] [] 6 9 [38 2 5 3 8 4 1 6 9] [9 6 1 4 8 3 5 2 38] 0 [] []
Input
3 -6 8 0 4 -2 -5 1 2 3 4 5 6 7
Output
1 8 [2 3 -5 -6 8 0 4 -2] [-2 4 0 8 -6 -5 3 2] 0 [] [] 2 8 [2 3 -6 -5 8 0 4 -2] [-2 4 0 8 -5 -6 3 2] 0 [] [] 3 8 [2 3 -6 8 -5 0 4 -2] [-2 4 0 -5 8 -6 3 2] 0 [] [] 4 8 [2 3 -6 8 0 -5 4 -2] [-2 4 -5 0 8 -6 3 2] 0 [] [] 5 8 [2 3 -6 8 0 4 -5 -2] [-2 -5 4 0 8 -6 3 2] 0 [] [] 6 8 [2 3 -6 8 0 4 -2 -5] [-5 -2 4 0 8 -6 3 2] 0 [] [] 7 8 [2 3 -6 8 0 4 -2 -5] [-5 -2 4 0 8 -6 3 2] 0 [] []
Input
-5 3 -6 8 0 4 -2 1 2
Output
1 8 [2 -5 3 -6 8 0 4 -2] [-2 4 0 8 -6 3 -5 2] 0 [] [] 2 8 [2 -5 3 -6 8 0 4 -2] [-2 4 0 8 -6 3 -5 2] 0 [] []
Input
3 -6 8 0 4 -2 1 2
Output
1 7 [7 3 -6 8 0 4 -2] [-2 4 0 8 -6 3 7] 0 [] [] 2 7 [7 3 -6 8 0 4 -2] [-2 4 0 8 -6 3 7] 0 [] []
Input
3 -6 8 0 4 -2 1 2
Output
1 7 [7 3 -6 8 0 4 -2] [-2 4 0 8 -6 3 7] 0 [] [] 2 7 [7 3 -6 8 0 4 -2] [-2 4 0 8 -6 3 7] 0 [] []
Input
1 2
Output
1 1 [0] [0] 0 [] [] 2 1 [0] [0] 0 [] []