Î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 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şi1 ≤ YK≤ UK≤ MpentruK=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!