Pagini recente » Cod sursa (job #2054661) | Cod sursa (job #889943) | Cod sursa (job #2853936) | Cod sursa (job #636595) | Cod sursa (job #2563995)
using namespace std;
#include<bits/stdc++.h>
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
int xuri[7], nrxuri;
int yuri[7], nryuri;
set<long long> frx;
set<long long> fry;
unsigned long long ariaTotala, perimetruTotal;
struct punct{
int x;
int y;
};
struct dreptunghi{
punct stjos;
punct drsus;
} a, b, c, dmare;
void citire(dreptunghi &d) {
fin >> d.stjos.x >> d.stjos.y >> d.drsus.x >> d.drsus.y;
frx.insert(d.stjos.x);
frx.insert(d.drsus.x);
fry.insert(d.stjos.y);
fry.insert(d.drsus.y);
}
unsigned long long aria(dreptunghi d) {
return (d.drsus.x - d.stjos.x) * (d.drsus.y - d.stjos.y);
}
bool seAflaInInterior(dreptunghi mic) {
bool ok = 0;
if (a.stjos.x <= mic.stjos.x && mic.drsus.x <= a.drsus.x) {
if (a.stjos.y <= mic.stjos.y && mic.drsus.y <= a.drsus.y) {
ok = 1;
}
}
if (b.stjos.x <= mic.stjos.x && mic.drsus.x <= b.drsus.x) {
if (b.stjos.y <= mic.stjos.y && mic.drsus.y <= b.drsus.y) {
ok = 1;
}
}
if (c.stjos.x <= mic.stjos.x && mic.drsus.x <= c.drsus.x) {
if (c.stjos.y <= mic.stjos.y && mic.drsus.y <= c.drsus.y) {
ok = 1;
}
}
return ok;
}
bool segmentValabilX(int x1, int x2, int Y) {
int intrat = 0;
if (a.stjos.y == Y || a.drsus.y == Y) {
if (b.stjos.y < Y && Y < b.drsus.y && b.stjos.x <= x1 && x2 <= b.drsus.x) {
return 0;
}
if (c.stjos.y < Y && Y < c.drsus.y && c.stjos.x <= x1 && x2 <= c.drsus.x) {
return 0;
}
if (a.stjos.x <= x1 && x2 <= a.drsus.x) {
intrat++;
}
}
if (b.stjos.y == Y || b.drsus.y == Y) {
if (a.stjos.y < Y && Y < a.drsus.y && a.stjos.x <= x1 && x2 <= a.drsus.x) {
return 0;
}
if (c.stjos.y < Y && Y < c.drsus.y && c.stjos.x <= x1 && x2 <= c.drsus.x) {
return 0;
}
if (b.stjos.x <= x1 && x2 <= b.drsus.x) {
intrat++;
}
}
if (c.stjos.y == Y || c.drsus.y == Y) {
if (a.stjos.y < Y && Y < a.drsus.y && a.stjos.x <= x1 && x2 <= a.drsus.x) {
return 0;
}
if (b.stjos.y < Y && Y < b.drsus.y && b.stjos.x <= x1 && x2 <= b.drsus.x) {
return 0;
}
if (c.stjos.x <= x1 && x2 <= c.drsus.x) {
intrat++;
}
}
if (intrat != 1) {
return 0;
}
return 1;
}
bool segmentValabilY(int y1, int y2, int X) {
int intrat = 0;
if (a.stjos.x == X || a.drsus.x == X) {
if (b.stjos.x < X && X < b.drsus.x && b.stjos.y <= y1 && y2 <= b.drsus.y) {
return 0;
}
if (c.stjos.x < X && X < c.drsus.x && c.stjos.y <= y1 && y2 <= c.drsus.y) {
return 0;
}
if (a.stjos.y <= y1 && y2 <= a.drsus.y) {
intrat++;
}
}
if (b.stjos.x == X || b.drsus.x == X) {
if (a.stjos.x < X && X < a.drsus.x && a.stjos.y <= y1 && y2 <= a.drsus.y) {
return 0;
}
if (c.stjos.x < X && X < c.drsus.x && c.stjos.y <= y1 && y2 <= c.drsus.y) {
return 0;
}
if (b.stjos.y <= y1 && y2 <= b.drsus.y) {
intrat++;
}
}
if (c.stjos.x == X || c.drsus.x == X) {
if (a.stjos.x < X && X < a.drsus.x && a.stjos.y <= y1 && y2 <= a.drsus.y) {
return 0;
}
if (b.stjos.x < X && X < b.drsus.x && b.stjos.y <= y1 && y2 <= b.drsus.y) {
return 0;
}
if (c.stjos.y <= y1 && y2 <= c.drsus.y) {
intrat++;
}
}
if (intrat != 1) {
return 0;
}
return 1;
}
int main() {
citire(a);
citire(b);
citire(c);
for (auto i = frx.begin(); i!=frx.end(); i++) {
nrxuri++;
xuri[nrxuri] = *i;
}
for (auto i = fry.begin(); i!=fry.end(); i++) {
nryuri++;
yuri[nryuri] = *i;
}
/*
for (int i = 1; i<=nrxuri; i++) {
cout << xuri[i] << " ";
}
cout << endl;
for (int i = 1; i<=nryuri; i++) {
cout << yuri[i] << " ";
}
cout << endl;*/
for (int i = 1; i<nryuri; i++) {
for (int j = 1; j<nrxuri; j++) {
punct stjosD = {xuri[j], yuri[i]};
punct drsusD = {xuri[j+1], yuri[i+1]};
dreptunghi D = {stjosD, drsusD};
if (seAflaInInterior(D)) {
ariaTotala += aria(D);
}
}
}
fout << ariaTotala << " ";
for (int i = 1; i<=nryuri; i++) {
for (int j = 1; j<nrxuri; j++) {
if (segmentValabilX(xuri[j], xuri[j+1], yuri[i])) {
perimetruTotal += (xuri[j+1] - xuri[j]);
}
}
}
for (int i = 1; i<=nrxuri; i++) {
for (int j = 1; j<nryuri; j++) {
if (segmentValabilY(yuri[j], yuri[j+1], xuri[i])) {
perimetruTotal += (yuri[j+1] - yuri[j]);
}
}
}
fout << perimetruTotal;
fin.close();
fout.close();
return 0;
}