Sigui una matriu quadrada d’enters (), en la qual sabem que els valors d’una mateixa fila són sempre tots diferents entre ells (és a dir, no hi ha valors repetits), i , o sigui, els valors de la matriu estan entre 0 i 1000, ambdós inclosos.
Diem que la matriu satisfà la propietat de files permutades si i només si:
Per a cada parell de files i , amb , la fila és una permutació de la fila . És a dir, cada fila conté els mateixos valors que les altres files, però en un ordre diferent. (En particular, això implica que totes les files són diferents.)
Per exemple, considerem la matriu de :
| 1 | 2 | 3 |
| 2 | 3 | 1 |
| 3 | 1 | 2 |
Aquesta matriu satisfà la propietat perquè totes les files contenen els valors , i són totes diferents.
Escriu una funció te_files_permutades amb la següent
declaració i especificació:
/*
* @pre M és quadrada i M.size() > 0
* 1 <= M[i][j] <= 1000
* Els valors d'una mateixa fila són tots diferents.
*
* @post Retorna `true` si i només si la matriu satisfà les
* següents condicions:
* - Totes les files són diferents.
* - Totes les files són permutacions entre elles.
*/
bool te_files_permutades(const vector<vector<int>>& M);
La icona de nom ".CPP" conté el programa principal per fer proves.
Només cal enviar la funció que us demanem (i les
funcions que hagueu pogut declarar vosaltres). Podeu començar amb
main.cc i comentar o esborrar les funcions
llegeix_matriu i main per fer l’enviament.
En aquest problema és molt avantatjós utilitzar la comparació de
vectors (és a dir, comparar-los amb els operadors == i
!=). Per exemple:
vector<int> a = {1, 2, 3}, b = {1, 2, 3}, c = {4, 5, 6};
if (a == b) { cout << "Iguals!" << endl; }
if (a != c) { cout << "Diferents!" << endl; }
L’entrada és una seqüència de matrius quadrades. De la lectura ja se n’encarrega el programa principal.
La sortida són els resultats per a cada matriu: "yes" si
satisfà la propietat, "no" en cas contrari. De l’escriptura
també se n’encarrega el programa principal.
Input
3 1 2 3 2 3 1 3 1 2 4 1 2 3 4 2 3 4 1 3 4 1 2 1 2 3 4 4 0 5 1 8 5 1 8 0 1 8 0 5 8 5 1 0 4 5 0 9 7 0 9 7 5 9 7 5 0 7 4 5 0 5 1 2 3 4 5 2 3 4 5 1 3 4 5 1 2 4 5 1 2 3 5 1 2 3 4
Output
yes no yes no yes