Rezolvare completă PbInfo #1218 Teren

În satul vecin există un teren agricol de formă dreptunghiulară împărțit în N*M pătrate elementare identice, dispuse alăturat câte M pe fiecare rând şi câte N pe fiecare coloană. Rândurile sunt numerotate de la 1 la N, iar coloanele de la 1 la M. Un pătrat elementar situat în teren pe rândul R și coloana C este identificat prin coordonatele (R,C).

Suprafețe dreptunghiulare din teren (formate fiecare din unul sau mai multe pătrate elementare alăturate) sunt revendicate de T fermieri din sat, în calitate de moștenitori, pe baza actelor primite de la strămoșii lor. Pentru că au apărut și acte false, s-a constat că pot exista mai mulți fermieri care revendică aceleași pătrate elementare.

În cele T acte ale fermierilor, suprafețele dreptunghiulare sunt precizate fiecare prin câte două perechi de numere (X,Y) și (Z,U), reprezentând coordonatele primului pătrat elementar din colțul stânga-sus al suprafeței (rândul X și coloana Y), respectiv coordonatele ultimului pătrat elementar situat în colțul dreapta-jos al suprafeței (rândul Z și coloana U).

Cerinţe

Scrieţi un program care să citească numerele naturale N, M, T, R, C apoi cele T perechi de coordonate (X,Y) și (Z,U) precizate în acte (corespunzătoare suprafețelor dreptunghiulare revendicate) și care să determine:

  1. numărul fermierilor care revendică pătratul elementar identificat prin coordonatele (R,C);
  2. numărul maxim de fermieri care revendică același pătrat elementar;
  3. numărul maxim de pătrate elementare ce formează o suprafață pătratică nerevendicată de niciun fermier.

Date de intrare

Fişierul teren.in conţine pe prima linie un număr natural P care poate avea doar valoarea 1, valoarea 2 sau valoarea 3. Pe a doua linie a fișierului sunt scrise cinci numere naturale N, M, T, R, C, separate prin câte un spaţiu, cu semnificaţia din enunţ. Pe fiecare din următoarele T linii ale fișierului sunt câte patru numere naturale nenule XK, YK, ZK, UK, separate prin câte un spaţiu, reprezentând perechile de coordonate (XK,YK) și (ZK,UK) corespunzătoare terenurilor revendicate de cei T fermieri (1 ≤ K ≤ T).

Date de ieșire

Fişierul de ieşire teren.out va conţine pe prima linie un număr natural reprezentând numărul fermierilor care revendică pătratul elementar identificat prin coordonatele (R,C) dacă cerința a fost 1, un număr natural reprezentând numărul maxim de fermieri ce revendică același pătrat elementar dacă cerința a fost 2, respectiv un număr natural reprezentând numărul maxim de pătrate elementare ce formează o suprafață pătratică nerevendicată de niciun fermier dacă cerința a fost 3.

Restricții și precizări

  • 3 ≤ N, M ≤ 180; 3 ≤ T ≤ 100; 1 ≤ R ≤ N; 1 ≤ C ≤ M;
  • 1 ≤ XK ≤ ZK ≤ N şi 1 ≤ YK ≤ UK ≤ M pentru K=1,2,3,...,T;
  • Pentru rezolvare corectă a cerinţei 1 se acordă 20% din punctaj, pentru rezolvarea corectă a cerinţei 2 se acordă 20% din punctaj, iar pentru rezolvarea corectă a cerinței 3 se acordă 60% din punctaj.

Exemplul 1

teren.in

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

teren.out

2

Explicație

Pătratul elementar cu coordonatele R=2 și C=2 este revendicat de 2 fermieri.

Exemplul 2

teren.in

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

teren.out

3

Explicație

Pătratul elementar cu coordonatele (2,3) este revendicat de 3 fermieri (numărul maxim de revendicări).

Exemplul 3

teren.in

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

teren.out

4

Explicație

Sunt două suprafețe pătratice nerevendicate de niciun fermier, formate fiecare din numărul maxim de patru pătrate elementare. Acestea au coordonatele: (1,4) și (2,5) respectiv (2,4) și (3,5).

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

//autor Carmen Minca - 100p
#include <fstream>
using namespace std;

int a[185][185];

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

int main()
{int n,t,m, r,c,i,j,p,nrb=0,nrc=0,x,y,z,u,k,lat,ok,nr;
f>>p>>n>>m>>t>>r>>c;
for(k=1;k<=t;k++)
{  f>>x>>y>>z>>u;
   for(i=x;i<=z;i++)
        for(j=y;j<=u;j++)
        {a[i][j]++;
         nrb=max(nrb,a[i][j]);}
}
if(p==1) g<<a[r][c]<<'\n';///cerinta 1
else if(p==2)g<<nrb<<'\n';  ///cerinta 2
else{
///cerinta 3
for(i=1;i<=n-nrc; i++)
    for(j=1;j<=m-nrc;j++)
      if(a[i][j]==0)
        { lat=1; ok=1;
          while(ok)
            {x=z=lat+i;y=u=lat+j;
             if(x>n || y>m)ok=0;
             while(z>=i && ok )
              { if(a[x][u]+a[z][y]==0){u--; z--;}
                else ok=0;
              }
             if(ok)lat++;
            }
          nrc=max(lat, nrc);
        }
g<<nrc*nrc<<'\n';}
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 #1218 Teren

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