Informatică, întrebare adresată de tabaraemi, 9 ani în urmă

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.

Răspunsuri la întrebare

Răspuns de blindseeker90
5
#include <iostream>
#include <fstream>
using namespace std;
int departamente[11];
int main(){
int p,M,N,K,i,j,a[100][100];
ifstream his("harta1.in");
ofstream hos("harta1.out");
his>>p;
his>>N>>M>>K;
for(i=0;i<N;i++){
for(j=0;j<M;j++){
his>>a[i][j];
}
}
if(p==1){
int suprafata=0;
for(i=0;i<N;i++){
for(j=0;j<M;j++){
if(a[i][j]==0){
suprafata++;
}
}
}
hos<<suprafata;
}
if(p==2){
int max_departamente=0;
if(a[0][0]>0){
departamente[a[0][0]]++;
}
for(j=1;j<M;j++){
if(a[0][j]>0&&a[0][j-1]!=a[0][j]){
departamente[a[0][j]]++;
}
}
for(i=1;i<N;i++){
if(a[i][0]>0&&a[i-1][0]!=a[i][0]){
departamente[a[i][0]]++;
}
}
for(i=1;i<N;i++){
for(j=1;j<M;j++){
if(a[i][j]>0&&a[i-1][j]!=a[i][j]&&a[i][j-1]!=a[i][j]){
departamente[a[i][j]]++;
}
}
}
for(i=1;i<=K;i++){
if(departamente[i]>max_departamente){
max_departamente=departamente[i];
}
}
for(i=1;i<=K;i++){
if(departamente[i]==max_departamente){
hos<<i<<" ";
}
}
}
return 0;
}

tabaraemi: 90/100
tabaraemi: Ai putea , te rog, sa te mai gandesti putin unde ar putea fi un caz in care nu merge corect algoritmul ?
blindseeker90: Poate da 90/100 si pentru ca nu este un algoritm eficient. L-am facut doar ca sa functioneze, nu este neaparat cea mai rapida metoda sau care foloseste cea mai putina memorie
blindseeker90: O sa ma gandesc sa vad daca este vreun caz care nu este acoperit.
tabaraemi: Nu e vorba de limita de timp.Pur si simplu la ultimul test da 'raspuns gresit"
Alte întrebări interesante