Pagini recente » Cod sursa (job #1061053) | Cod sursa (job #2127730) | Cod sursa (job #485513) | Cod sursa (job #2364396) | Cod sursa (job #2655368)
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
ifstream f("reuniune.in");
ofstream g("reuniune.out");
struct point{
long long x, y;
};
struct dreptunghi{
point a, b;
};
dreptunghi d[3];
long long arie(dreptunghi d)
{
return abs(d.a.x - d.b.x) * abs(d.a.y - d.b.y);
}
long long perimetru(dreptunghi d)
{
if (d.a.x-d.b.x==0) return d.a.y-d.b.y;
else if (d.a.y-d.b.y==0) return d.a.x-d.b.x;
return abs(d.a.x - d.b.x) * 2 + abs(d.a.y - d.b.y) * 2;
}
//https://www.geeksforgeeks.org/intersecting-rectangle-when-bottom-left-and-top-right-corners-of-two-rectangles-are-given/
dreptunghi intersectie(dreptunghi d1, dreptunghi d2)
{
long long xa = max(d1.a.x, d2.a.x);
long long ya = max(d1.a.y, d2.a.y);
long long xb = min(d1.b.x, d2.b.x);
long long yb = min(d1.b.y, d2.b.y);
dreptunghi d;
d.a.x = 0;
d.a.y = 0;
d.b.x = 0;
d.b.y = 0;
if (xa >= xb || ya >= yb)
return d;
d.a.x = xa;
d.a.y = ya;
d.b.x = xb;
d.b.y = yb;
return d;
// 1 1 3 3
// 5 5 6 6
//xa = 5, xb = 3
}
long long arie_perimetru(long long (*f)(dreptunghi), dreptunghi d[]) {
return f(d[0]) + f(d[1]) + f(d[2])
- f(intersectie(d[0],d[1])) - f(intersectie(d[1],d[2]))
- f(intersectie(d[2],d[0])) + f(intersectie(d[0], intersectie(d[1],d[2])));
}
int main()
{
long long i, j;
for (i = 0; i < 3; i++) {
f >> d[i].a.x >> d[i].a.y;
f >> d[i].b.x >> d[i].b.y;}
long long a = arie_perimetru(arie, d);
long long p = arie_perimetru(perimetru, d);
g<< a << ' ' << p << '\n';
return 0;
}