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
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 ; }
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
#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;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Engleza,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă