Informatică, întrebare adresată de Utilizator anonim, 9 ani în urmă

Am nevoie de problema "Bacteria" de pe site-ul pbinfo. Am nevoie pana luni. E tema de vacanța la informatica si nu o inteleg. Coroana celui mai clar si corect raspuns + 20 de puncte!!

Răspunsuri la întrebare

Răspuns de Utilizator anonim
3
#include <iostream.h>
using namespace std ;

int main (){ M[100][100] , n, m,i,j;
    //Se citesc dimensiunile tarii
cin>>n;
cin>>m;
//La inceput , toate zonele din tara primesc valoarea 1 
//Folosesc notatia 1 ->zona sanatoasa si 0 -> zona infectata 
//Vom umple matricea cu 1 deoarece initial toate zonele sunt sanatoase 
for(i=1;i<=n;i++)
      for(j=1;j<=m;j++)
             M[i][j]=1;

//Infectia incepe din sud vest adica din coltul stanga jos ( pozitia m[n][1])
M[n][1]=0;    //Prima zona a fost infectata 

/*Din spusele problemei observam ca fiecare zona infectata o infecteaza pe cea de deasupra iar pe ultima linie e infectata si cea din dreapta */
/*Stim ca infectia se opreste cand se ajunge pe ultima coloana (partea dreapta ) sau pe prima linie a matricei ( partea de sus ) */
/*Alegem variabila ok1 care e 0 daca infectia a ajuns in partea de sus a matricei  sau 1 in caz contrar.
Alegem variabila ok2 care e 0 daca infectia a ajuns in partea din dreapta a matricei sau 1 in caz contrar .*/

int ok1=1;
int ok2=1;
while(ok1==1&&ok2==1) {//Cat timp nu a ajuns infectia nici sus nici in dreapta
         for(i=1;i<=n;i++)
                 for(j=1;j<=m;j++){
                           if(M[i][j]==0) //Daca avem o zona infectata 
                               M[i-1][j]=0; //Vom infecta si zona de deasupra 
                          if(i==n &&M[i][j]==0&&M[i][j+1]=1){ //O sa explic asta dupa 
                                   M[i][j+1]=1;
                                   j++;}}

/*Dupa ce am infectat zonele , verificam daca infectia a ajuns sau nu in partea de sus sau in dreapta */

for(j=1;j<=m;j++)
    if(M[1][j]==0) ok1=0;            //Pt partea de sus 
for(i=1;i<=n;i++)
   if(M[i][m]==0) ok2=0;   }          //Pt partea dreapta 

/*Imprastierea infectiei se opreste cand se ajunge sus sau in dreapta ( unul din ok se face 0*/

//Tot ce ne ramane de facut e sa numaram zonele "sanatoase " din matrice 
int nr=0;  //Declaram variabila care retine cate zone "sanatoase" mai sunt 
for(i=1;i<=n;i++)
   for(j=1;j<=m;j++) 
        if(M[i][j]==1) nr++;

cout<<"Nr zone sanatoase : " <<nr ; }

katalynthekingp3p1js: sau pe scurt
katalynthekingp3p1js: #include <iostream>
#include <fstream>
#include <math.h>
#include <iomanip>
using namespace std;
ifstream f("bacterie.in");
ofstream g("bacterie.out");
int main()
{
unsigned long long n, m, rez;
f >> n >> m;
if (n < m)
rez = n * m - n * (n + 1) / 2;
else
rez = n * m - m * (m + 1) / 2;
g << rez;
}
Utilizator anonim: Am zis sa-i arat principiul de functionare
Utilizator anonim: E mult mai simplu cum ai zis tu dar e cam greu de explicat fara desen
Utilizator anonim: Da ms mult
Alte întrebări interesante