Rezolvare completă PbInfo #1486 Gropi

Gigel a primit de la prietenul său Programatorul o hartă a grădinii acestuia. Grădina are forma dreptunghiulară şi harta pe care a primit-o Gigel conţine informaţii despre starea culturii de pomi fructiferi. Mai precis ea conţine înălţimile fiecărui copac şi zonele în care s-au săpat gropi dar încă nu au fost plantaţi copaci. Harta grădinii poate fi reprezentată sub forma unei table dreptunghiulare cu N linii, numerotate de la 1 la N de sus în jos, şi M coloane, numerotate de la 1 la M de la stânga la dreapta. În fiecare celulă se află un număr real corespunzător înălţimii copacului sau valoarea 0 corespunzătoare unei gropi.

Cerința

Cunoscând coordonatele unui punct de pe hartă ajutaţi-l pe Gigel să determine pe care dintre cele 8 direcţii N, NE, E, SE, S, SV, V, NV corespunzătoare acestui punct se află cele mai multe gropi.

Date de intrare

Fișierul de intrare gropi.in conține pe prima linie patru numere: N, M reprezentând dimensiunile grădinii şi X, Y reprezentând coordonatele unui punct de pe hartă – linie şi coloană. Pe următoarele N linii sunt şiruri de câte M numere corespunzătoare copacilor respectiv gropilor.

Date de ieșire

Fișierul de ieșire gropi.out va conține pe prima linie direcţia pe care se află cele mai multe gropi şi numărul acestora separate printr-un spațiu. Direcţia este indicată prin una din următoarele valori: N, NE, E, SE, S, SV, N, NV. Dacă sunt două direcţii cu acelaşi număr de gropi se va afişa ultima direcţie
considerând sensul orar.

Restricții și precizări

  • 1<=N,M<=1000
  • 1<=X<=N, 1<=Y<=M

Exemplu

gropi.in

4 6 3 3
2.2 4.5 0 4.3 0 8.5
6.8 0 9.4 0 7.5 9.3
1.7 0 2.6 4.7 0 0
0 3.2 6.3 8.1 5.2 2.2

gropi.out

E 2

Explicație

Din punctul de coordonate 3 3 pe direcţiile:

  • SE, S, SV nu se află nicio groapă
  • N, V, NV se afla câte o groapă
  • NE, E se află câte 2 gropi.

Se va afişa ultima direcţie considerând sensul orar.

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 Gropi:

#include <fstream>
#include <cmath>

using namespace std;
int dx[]={-1,-1, 0, 1,1,1,0,-1};
int dy[]={ 0,-1,-1,-1,0,1,1, 1};
char t[8][3]={"N","NV","V","SV","S","SE","E","NE"};
int n,m,x,y;
float a[1002][1002];

ifstream f("gropi.in");
ofstream g("gropi.out");

int main()
{
    int i,j,k,dir,nr, maxim=0;
    f>>n>>m>>x>>y;
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            {
                f>>a[i][j];
            }
    for (k = 0 ; k < 8 ; k++)
    {
        i=x+dx[k];j=y+dy[k];
        nr=0;
        while (i>0 && j>0 && i<=n &&j<=m)
        {
            if ( a[i][j] == 0 )nr++;
            i=i+dx[k];
            j=j+dy[k];
        }
        if (nr>maxim) {
            maxim=nr; dir=k;
        }
    }
    g <<t[dir]<<" "<<maxim<<"\n";
    f.close();
    g.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 #1486 Gropi

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1486 Gropi 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!