O suprafaţă dreptunghiulară de înălţime N şi lăţime M unităţi trebuie acoperită perfect (placată) prin utilizarea unor plăci de formă dreptunghiulară de dimensiune 1 x P sau P x 1, unde P este un număr natural nenul. Suprafaţa dată poate fi privită ca un caroiaj cu NxM pătrăţele egale cu unitatea.
O placare corectă a suprafeţei iniţiale se memorează într-un fişier text folosind următoarele convenţii de codificare:
- pe prima linie se precizează dimensiunile
NşiMale suprafeţei; - o placă dreptunghiulară de laţime
Peste codificată prin numărul naturalP, iar o placă de înalţimePse codifică prin numărul întreg–P; - convenim ca placa având ambele dimensiuni egale cu unitatea să se codifice cu valoarea
1; - pe fiecare din cele
Nlinii ale codificării se află câte un şir de valori întregi reprezentând, în ordine de la stânga la dreapta, codurile plăcilor care se găsesc amplasate începând de la respectiva linie; - codul
Pstrict mai mare ca1al unei placi orizontale apare o singură dată pe linia corespunzătoare pe care se află placa, iar codul–Pal unei placi verticale va apare o singură dată şi anume pe prima linie de la care placa respectivă este amplasată în jos pe o anumita coloană a suprafeţei; - dacă pe o anumită linie a suprafeţei nu există astfel de coduri de plăci, atunci pe respectiva linie din fişier este o singură valoare de
0.
Folosind codificarea unei placări a suprafeţei iniţiale, se poate determina imaginea acestei placări sub forma unui tablou bidimensional A, cu N linii şi M coloane, unde Aij = valoarea absolută a codului plăcii care se suprapune peste pătrăţelul de pe linia i şi coloana j.
Cerinţă
Cunoscând codificarea unei placări corecte a suprafeţei date să se obţină imaginea acestei placări (matricea de valori corespunzătoare codificării suprafeţei).
Date de intrare
Fișierul de intrare placare.in are următoarea structură:
- pe prima linie valorile naturale
N M, separate printr-un spaţiu, undeNeste înălţimea suprafeţei,Meste lăţimea suprafeţei. - pe fiecare din următoarele
Nlinii se află un şir de valori întregi, separate prin câte un spaţiu, reprezentând codificarea respectivei linii a placării.
Date de ieșire
În fișierul de ieșire placare.out se va tipări tabloul bidimensional ce reprezintă imaginea placării, compus din N linii, pe fiecare dintre ele aflându-se M valori naturale separate prin câte un spaţiu, cu semnificaţia din enunţ.
Restricții și precizări
1 ≤ N, M ≤ 300- pentru 80% din teste,
1 ≤ N, M ≤ 100 - dimensiunea
Psau-Pa unei plăci este aleasă astfel încât acoperirea obţinută să nu depăşească înălţimeaNsau latimeaMa suprafeţei. - datele din fişierul de intrare sunt corecte în sensul că reprezintă codificarea unei acoperiri a zonei dreptunghiulare de dimensiuni
NşiM.
Exemplul 1
placare.in
4 4 -4 1 1 1 1 2 2 1 3
placare.out
4 1 1 1 4 1 2 2 4 2 2 1 4 3 3 3
Explicație
Valoarea -4 codifică o placă de înălţime 4 şi laţime 1 plasată începând din pătratul de coordonate (1,1) şi pînă în pătratul de coordonate (4,1)
Valoarea 3 de pe ultima linie a codificării desemnează o placă de lăţime 3 şi înălţime 1, plasată orizontal, începând din pătrăţelul de coordonate (4,2).
Exemplul 2
placare.in
3 2 -3 -2 0 1
placare.out
3 2 3 2 3 1
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 Placare:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("placare.in");
ofstream fout("placare.out");
short int n,m,a[301][301];
int main(){
fin>>n>>m;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;)
if(a[i][j]==0){
int x;
fin>>x;
if(x==0)
continue;
if(x>0)
for(int k=1;k<=x;++k,++j)
a[i][j]=x;
else{
for(int k=1;k<=-x;++k)
a[i+k-1][j]=-x;
++j;
}
}
else
j++;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j)
fout<<a[i][j]<<" ";
fout<<endl;
}
}
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 #1097 Placare
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1097 Placare 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!