Napisz program, który mając dane współrzędne dwóch prostokątów, których boki są równoległe do osi współrzędnych, policzy pole części wspólnej tych prostokątów.

Wejście
W pierwszym wierszu wejścia znajdują się 4 liczby całkowite: , oznaczające odpowiednio współrzędną - ową i - ową lewego górnego rogu i współrzędną - ową i - ową prawego dolnego rogu pierwszego prostokąta.

W drugim wierszu wejścia znajdują się 4 liczby całkowite: , oznaczające odpowiednio współrzędną - ową i - ową lewego górnego rogu i współrzędną - ową i - ową prawego dolnego rogu drugiego prostokąta.

Wszystkie współrzędne są nie mniejsze niż i nie większe niż .

Wyjście
Pierwszym i jedyny wiersz wyjścia powinien zawierać jedną liczę całkowitą równą wartości pola części wspólnej dwóch prostokątów.

Przykład
Dla danych wejściowych:

0 3 4 0
2 4 6 1

poprawną odpowiedzią jest:

4

Nie mam pomysłu jak to zrobić. mógłby proszę ktoś napisać przykładowy program. Najlepiej z wyjaśnieniem jak to działa. Z góry dziękuje.



Odpowiedź :

Odpowiedź:

#include <iostream>

#include <cstdlib>

#include <algorithm>

using namespace std;

int main() {

   int x1[2], x2[2], y1[2], y2[2], x[4], y[4], a, b;

   cin >> x1[0] >> y1[0] >> x1[1] >> y1[1];

   cin >> x2[0] >> y2[0] >> x2[1] >> y2[1];

   x[0] = min(x1[0], x1[1]);

   x[1] = max(x1[0], x1[1]);

   x[2] = min(x2[0], x2[1]);

   x[3] = max(x2[0], x2[1]);

   

   if (x[2] >= x[0] && x[2] < x[1] && x[3] >= x[1]) a = x[1] - x[2];

   else if (x[3] <= x[1] && x[3] > x[0] && x[2] <= x[0]) a = x[3] - x[0];

   else if (x[2] > x[0] && x[3] < x[1]) a = x[3] - x[2];

   else a = x[1] - x[0];

   y[0] = min(y1[0], y1[1]);

   y[1] = max(y1[0], y1[1]);

   y[2] = min(y2[0], y2[1]);

   y[3] = max(y2[0], y2[1]);

   if (y[2] >= y[0] && y[2] < y[1] && y[3] >= y[1]) b = y[1] - y[2];

   else if (y[3] <= y[1] && y[3] > y[0] && y[2] <= y[0]) b = y[3] - y[0];

   else if (y[2] > y[0] && y[3] < y[1]) b = y[3] - y[2];

   else b = y[1] - y[0];

   cout << a*b;

   getchar();

   return 0;

}

Wyjaśnienie: