Rezolvare completă PbInfo #1496 Harta1

O hartă este codificată printr-o matrice cu N linii și M coloane de elemente numere naturale. Valoarea 0 semnifică o zonă cu apă. Zonele de uscat sunt codificate prin valori între 1 și K. Celulele aparținând unei țări I sunt codificate cu valoarea I. Fiecare țară este împărțită în departamente. Prin definiție, un departament reprezintă o mulțime de celule de aceeași valoare, continuă pe linii și coloane (nu și diagonale).

Cerința

Fiind dată o hartă codificată ca mai sus. să se determine:

a) Suprafața totală a apei.
b) Lista țărilor cu cele mai multe departamente, ordonată crescător.

Date de intrare

Fișierul de intrare harta1.in conține pe prima linie p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2. Pe a doua linie conține valorile N, M și K cu semnificația din enunț. Pe următoarele N linii câte M valori, despărțite prin câte un spațiu, reprezentând codificarea hărții.

Date de ieșire

Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerință.

În acest caz, în fişierul de ieşire harta1.out se va scrie un singur număr natural n1, reprezentând suprafata totala a apei.

Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerință.

În acest caz, fişierul de ieşire harta1.out va conține pe prima și singura linie valorile ce reprezintă codurile țărilor cu număr maxim de departamente, separate prin câte un spațiu, în ordine crescătoare.

Restricții și precizări

  • 1 ≤ N , M ≤ 100
  • 1 ≤ K ≤ 10
  • O zonă de uscat poate conține mai multe departamente dintr-o aceeași țară.
  • Pentru rezolvarea corectă a cerinței a) se acordă 20% din punctaj, pentru rezolvarea corectă a ambelor cerințe se acordă punctajul maxim.

Exemplul 1

harta1.in

1
5 5 3
1 1 2 0 0
3 1 0 2 2
3 0 0 0 2
0 1 3 0 0
0 2 2 1 0

harta1.out

11

Explicație

Se va rezolva numai cerința a). Suprafața apei reprezintă numărul de valori de 0 din matrice.

Exemplul 2

harta1.in

2
5 5 3
1 1 2 0 0
3 1 0 2 2
3 0 0 0 2
0 1 3 0 0
0 2 2 1 0

harta1.out

1 2

Explicație

Se va rezolva numai cerința b). Țările cu cele mai multe departamente (3 departamente) sunt țările 1 și 2. Se observă că una din zonele de uscat conține 2 departamente distincte ale țării 1.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Harta1:

#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("harta1.in");
ofstream fout("harta1.out");
int a[101][101],p,n,m,k,valoare;
void citire()
{int i,j;
    fin>>p;
    fin>>n>>m>>k;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
          fin>>a[i][j];
    fin.close();
}
void fill(int x, int y)
{ valoare=a[x][y];
  a[x][y]=-1;
  if (valoare==a[x][y+1])fill(x,y+1);
  if(valoare==a[x+1][y])fill(x+1,y);
  if(valoare==a[x][y-1])fill(x,y-1);
  if(valoare==a[x-1][y])fill(x-1,y);
}
int main()
{int nr,i,j,q,maxim,h;
 int tampon[10];
    citire();
    if (p==1)
       {nr=0;
        for (i=1;i<=n;i++)
             for(j=1;j<=m;j++)
                if(a[i][j]==0) nr=nr+1;
        fout<<nr<<'\n';
     fout.close();
       }
    else
    {maxim=-1;
     h=0;
     for (q=1;q<=k;q++)
    {nr=0;
     for(i=1;i<=n;i++)
        for (j=1;j<=m;j++)
     if (a[i][j]==q)
         {fill(i,j);
          nr=nr+1;
         }
     if (nr>maxim){maxim=nr;h=1;tampon[h]=q;}
     else if(nr==maxim){h++;tampon[h]=q;}
    }
    for (q=1;q<=h-1;q++)
        fout<<tampon[q]<<" ";
    fout<<tampon[h];
    fout<<'\n';
    fout.close();
    }
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1496 Harta1

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1496 Harta1 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!