Cod sursa(job #1752004)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 2 septembrie 2016 15:30:43
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include <cstdio>

using namespace std;

struct drept
{
    long long x0, y0, x1, y1;
};

drept intersect(drept a, drept b)
{
	drept c;
    c.x0 = max(a.x0, b.x0);
    c.x1 = min(a.x1, b.x1);
    c.y0 = max(a.y0, b.y0);
    c.y1 = min(a.y1, b.y1);
    if (c.x1 < c.x0 || c.y1 < c.y0) {
        c.x1 = c.x0;
        c.y1 = c.y0;
    }
    return c;
}

long long arie(drept d)
{
	return (d.x1 - d.x0) * (d.y1 - d.y0);
}

long long perim(drept d)
{
    return 2* ((d.x1 - d.x0) + (d.y1 - d.y0));
}

int main()
{
    freopen("reuniune.in", "r", stdin);
    freopen("reuniune.out", "w", stdout);

	drept d[3];
    long long ar = 0, pr = 0;
    for (int i = 0; i < 3; i++) {
		scanf("%lld %lld %lld %lld", &d[i].x0, &d[i].y0, &d[i].x1, &d[i].y1);
		ar += arie(d[i]);
		pr += perim(d[i]);
    }
    ar -= arie(intersect(d[0], d[1]));
    ar -= arie(intersect(d[0], d[2]));
    ar -= arie(intersect(d[1], d[2]));
	ar += arie(intersect(intersect(d[0], d[1]), d[2]));
	pr -= perim(intersect(d[0], d[1]));
    pr -= perim(intersect(d[0], d[2]));
    pr -= perim(intersect(d[1], d[2]));
	pr += perim(intersect(intersect(d[0], d[1]), d[2]));

	cout << ar << " " << pr;

    return 0;
}