Î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:
- numărul fermierilor care revendică pătratul elementar identificat prin coordonatele
(R,C)
; - numărul maxim de fermieri care revendică același pătrat elementar;
- 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 X
K
, Y
K
, Z
K
, U
K
, separate prin câte un spaţiu, reprezentând perechile de coordonate (X
K
,Y
K
)
și (Z
K
,U
K
)
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 ≤ X
K
≤ Z
K
≤ N
şi1 ≤ Y
K
≤ U
K
≤ M
pentruK=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 .
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!