Informatică, întrebare adresată de buruianamarin04, 8 ani în urmă

Abstracţionismul este un curent în artele plastice europene, a cărui trăsătură o constituie
încercarea de a elimina din reprezentarea operei de artă orice referire la realităţile exterioare, ideile
şi sentimentele fiind relatate prin pete de culoare sau prin figuri geometrice.
Un renumit pictor tocmai a terminat o nouă operă de artă plastică abstracţionistă. Ea este
executată pe o pânză albă, dreptunghiulară, cu lăţimea W şi înălţimea H. Pe pânză sunt desenate n
dreptunghiuri colorate, laturlie cărora sunt paralele laturilor corespunzătoare ale pânzei.
Dreptughiuril, nu neapărat toate, se pot intersecta.
Pictorul este mândru de opera lui, dar, vai, colecţionarul care intenzionează să cumpere
tabloul, insistă ca preţul lui să fie stabilit ca fiind invers proporţional ariei suprafeţei necolorate a
pânzei.
Ajutaţi pictorul să calculeze aria S a suprafeţei necolorate a pânzei.
În scopuri didactice, fiecare din dreptungiurile i, = 1, 2, 3, … , , este descris prin
coordonatele (
, ) ale colţului stânga-sus şi coordonatele (
, ) ale colţului dreapta-jos.
Amintim, că în sistemul de coordonate carteziene, prima coordonată este abscisa x
(coordonata orizontală), iar a doua – ordonata y (coordonata verticală) a punctului pe plan. Evident,
lâţimile se măsoară pe orizontală (axa X), iar înălţimile – pe verticală (axa Y). Originea sistemului
de coordonate se află în colţul stânga-jos al pânzei.
Sarcină. Scrieţi un program, care, cunoscând dimensiunile pânzei şi descrierile
dreptunghiurilor colorate de pe ea, calculează aria suprafeţei necolorate a pânzei.
Date de intrare. Prima linie a intrării standard conţine numerele întregi W şi H, separate prin
spaţiu. Linia a doua a intrării standard conţine numărul întreg n. Fiecare din următoarele n linii ale
intrării standard conţine câte patru numere întregi
,
,
,
, separate prin spaţiu. Linia ( + 2) a
intrării standard conţine descrierea dreptunghiului i.
Date de ieşire. Ieşirea standard va conţine pe o singură linie numărul întreg S.
Restricţii. 1 ≤ , ≤ 100; 1 ≤ ≤ 5000; 0 ≤
, ≤ ; 0 ≤
, ≤ . Coordonatele
colţurilor de dreptunghiuri sunt numere întregi. Timpul de execuţie nu va depăşi 0,1 secundă.
Programul va folosi cel mult 1 Megaoctet de memorie operativă. Fişierul sursă va avea denumirea
arta.pas, arta.c sau arta.cpp.

Răspunsuri la întrebare

Răspuns de Utilizator anonim
0

Răspuns:

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

struct Rectangle {

int x1, y1, x2, y2;

};

vector<Rectangle> rectangles;

int w, h, n;

bool painted[10001][10001];

void mark(int x1, int y1, int x2, int y2) {

for (int i = x1; i < x2; i++) {

for (int j = y1; j < y2; j++) {

painted[i][j] = true;

}

}

}

int main() {

cin >> w >> h >> n;

for (int i = 0; i < n; i++) {

int x1, y1, x2, y2;

cin >> x1 >> y1 >> x2 >> y2;

rectangles.push_back({x1, y1, x2, y2});

}

for (auto rectangle : rectangles) {

mark(rectangle.x1, rectangle.y1, rectangle.x2, rectangle.y2);

}

int cnt = 0;

for (int i = 0; i < w; i++) {

for (int j = 0; j < h; j++) {

if (!painted[i][j]) {

cnt++;

}

}

}

cout << cnt << endl;

return 0;

}

Explicație:

Acest program alocă un vector care stochează informațiile despre toate dreptunghiurile. Apoi, marchează fiecare pixel din interiorul fiecărui dreptunghi ca fiind acoperit. În final, se numără câte pixeli neacoperiți sunt în pânză și se afișează rezultatul.

Alte întrebări interesante