Pagini recente » Cod sursa (job #529231) | Cod sursa (job #2873280) | Cod sursa (job #1075407) | Cod sursa (job #385187) | Cod sursa (job #2563908)
using namespace std;
#include<bits/stdc++.h>
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
int xuri[7], nrxuri;
int yuri[7], nryuri;
bool frx[1000001], fry[1000001];
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;
//d.stsus = {d.stjos.x, d.drsus.y};
//d.drjos = {d.drsus.x, d.stjos.y};
if (d.stjos.x < dmare.stjos.x) {
dmare.stjos.x = d.stjos.x;
}
if (d.drsus.x > dmare.drsus.x) {
dmare.drsus.x = d.drsus.x;
}
if (d.stjos.y < dmare.stjos.y) {
dmare.stjos.y = d.stjos.y;
}
if (d.drsus.y > dmare.drsus.y) {
dmare.drsus.y = d.drsus.y;
}
if (frx[d.stjos.x] == 0) {
nrxuri++;
xuri[nrxuri] = d.stjos.x;
frx[d.stjos.x] = 1;
}
if (frx[d.drsus.x] == 0) {
nrxuri++;
xuri[nrxuri] = d.drsus.x;
frx[d.drsus.x] = 1;
}
if (fry[d.stjos.y] == 0) {
nryuri++;
yuri[nryuri] = d.stjos.y;
fry[d.stjos.y] = 1;
}
if (fry[d.drsus.y] == 0) {
nryuri++;
yuri[nryuri] = d.drsus.y;
fry[d.drsus.y] = 1;
}
}
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) {
bool 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 = 1;
}
}
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 = 1;
}
}
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 = 1;
}
}
if (intrat == 0) {
return 0;
}
return 1;
}
bool segmentValabilY(int y1, int y2, int X) {
bool 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 = 1;
}
}
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 = 1;
}
}
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 = 1;
}
}
if (intrat == 0) {
return 0;
}
return 1;
}
int main() {
citire(a);
citire(b);
citire(c);
//cout << dmare.stjos.x << " " << dmare.stjos.y << " " << dmare.drsus.x << " " << dmare.drsus.y << endl;
sort(xuri+1, xuri+nrxuri+1);
sort(yuri+1, yuri+nryuri+1);
/*
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++) {
//cout << xuri[j] << " " << yuri[i] << " " << xuri[j+1] << " " << yuri[i+1] << endl;
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]);
// cout << "Y: " << yuri[i] << " X:" << xuri[j] << " " << xuri[j+1] << endl;
}
}
}
// cout << perimetruTotal << endl;
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]);
}
}
}
// cout << perimetruTotal << endl;
fout << perimetruTotal;
fin.close();
fout.close();
return 0;
}