Una matriu de màscara
és una matriu de caselles de tipus bool. Aplicar
a una matriu d’enters
consisteix en multiplicar per 0 aquelles caselles anàlogues de
(amb la mateixa fila i columna) que a
contenen false, i no alterar les altres caselles. Per
exemple:
M K apply_mask(M, K)
1 2 3 4 1 1 0 0 1 2 0 0
5 6 7 8 0 1 0 1 0 6 0 8
9 10 11 12 1 1 0 0 9 10 0 0
Les caselles de
es mostren com a 0 o 1 quan són false o true,
respectivament. Es veu com la matriu resultat conté zeros en aquelles
caselles a on
té un 0 (false), i la resta de valors queden igual que a
.
Implementa una funció apply_mask amb la declaració
següent:
typedef vector<vector<int>> Matrix;
typedef vector<vector<bool>> Mask;
/**
* @brief Retorna una nova matriu que és `M` aplicant la
* màscara `K`. La màscara és una matriu que té caselles de tipus
* `bool`, i quan una casella de la màscara és `false`, cal
* deixar la casella anàloga (mateixa fila i columna) de `M` a 0,
* altrament no cal fer res.
*
* @param `K` la matriu de màscara
* @param `M` la matriu d'interès (d'enters)
*
* @returns La matriu resultat d'aplicar `K` a `M`
*/
Matrix apply_mask(const Matrix& M, const Mask& K);
El centre d’interès d’aquest problema és la correctesa. Els jocs de prova comproven que la majoria de casos possibles produeixin la sortida correcta.
L’entrada ja la fa el programa principal proporcionat. Consisteix en un seguit de cassos amb dos enters per files i columnes i les matrius i de costat, en el format mostrat als exemples.
La sortida també la produeix el programa principal
proporcionat. Es mostra la matriu resultat de cridar
apply_mask en el mateix format, separant les matrius per
una línia buida per claredat.
Input
3 4 1 3 4 2 1 0 1 0 5 9 7 3 0 1 0 1 1 8 8 4 1 0 1 0 2 2 7 8 0 0 4 5 1 1
Output
1 0 4 0 0 9 0 3 1 0 8 0 0 0 4 5