Volem simular, amb un model ridículament senzill, la contaminació i els contagis que pot produir a un aula de la facultat l’esternut d’un estudiant possiblement infectat de covid-19.
Al nostre model el mapa de cada aula es representa per una matriu de n files i m columnes, on cada posició (i,j) representa una cadira (0≤ i < n, 0≤ j < m). La posició (i,j) de la matriu es marca amb una lletra e per tal de indicar que a la cadira (i,j) s’asseu un estudiant i amb un punt si la cadira està buida.
Assumirem que un dels estudiants de l’aula, assegut a la posició (i,j), esternuda. L’esternut fa que el virus es propagui en direcció horitzontal (cap a columnes posteriors a la seva) fins a una distància màxima h≥1, proporcional a la força de l’esternut . A més, l’esternut produeix aerosols que s’expandeixen i contaminen de virus tota l’àrea d’un triangle isòsceles amb àpex a (i,j) i alçada h, tal i com es mostra a la figura –a on l’esternut es produeix a la cadira vermella, amb distància màxima h=6.
Feu un programa que, donats el mapa d’ocupació d’una aula concreta, determini quina és l’àrea que queda contaminada i quants estudiants es contagiaran (en el pitjor cas) en simular diferents possibles posicions de l’esternut. El vostre programa ha d’incloure obligatòriament la següent funció:
int contagia(Aula& M, int i, int j, int h);
que, donat el mapa de l’aula M, la posició (i,j) de l’esternut, i la distància màxima d’expansió h, retorna el nombre d’estudiants que es contagiaran i marca a M l’àrea que ha quedat contaminada amb *. Els estudiants que es trobin dins de l’àrea contaminada canviaran la e per una I.
El tipus Aula es defineix de la següent forma:
using Aula = vector<string>;
Entrada
L’entrada consisteix d’un parell d’enters n i m, 0 < n,m≤ 100, seguits d’un mapa d’aula de n× m de caràcters en què un . indica un seient lliure i una e indica un seient ocupat per un estudiant. A continuació segueix una seqüencia de tuples de 3 elements. Cada tupla conté un parell d’enters i,j que indiquen la posició de l’esternut dins de l’aula (0≤ i < n i 0≤ j < m), i un enter h≥ 1 que determina la distància màxima d’expansió de l’esternut.
Sortida
Sobre el mapa inicial de l’aula, cal determinar, per a cada 3-tupla de la seqüència, quina és l’àrea que quedaria contaminada de virus i quants estudiants es podrien arribar a contagiar, seguint el format dels exemples. Després de la simulació cada 3-tupla de la seqüència, hi ha una línia de separació formada per vint guions -.
Observació
Les simulacions son independents entre elles, per tant heu d’utilitzar el mapa d’entrada de l’aula abans de realitzar cada simulació.
Input
6 6 ...e.. .ee.ee e..ee. ee.... ...... eeeeee 2 0 4 5 5 4 5 0 4
Output
Nous possibles infectats: 6 ..*I.. .II*ee I**Ie. eI**.. ..**.. eeeIee -------------------- Nous possibles infectats: 0 ...e.. .ee.ee e..ee. ee.... ...... eeeeeI -------------------- Nous possibles infectats: 4 ...e.. .ee.ee e..Ie. ee**.. .***.. IIIIee --------------------