Sigui una matriu M quadrada n × n d’enters (n ≥ 1), 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 Mij ∈ [0, 1000], 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 exemple, considerem la matriu de 3 × 3:
| 1 | 2 | 3 |
| 2 | 3 | 1 |
| 3 | 1 | 2 |
Aquesta matriu satisfà la propietat perquè totes les files contenen els valors {1, 2, 3}, 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);
Observació
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; }
Entrada
L’entrada és una seqüència de matrius quadrades. De la lectura ja se n’encarrega el programa principal.
Sortida
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