Cod sursa(job #1332346)

Utilizator cbanu96Banu Cristian cbanu96 Data 1 februarie 2015 21:56:48
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <bits/stdc++.h>

using namespace std;

struct Dreptunghi {
    int x0, x1, y0, y1;

    Dreptunghi operator+(const Dreptunghi& other) {
        Dreptunghi d;

        d.x0 = max(x0, other.x0);
        d.x1 = min(x1, other.x1);
        d.y0 = max(y0, other.y0);
        d.y1 = min(y1, other.y1);

        if (d.x0 > d.x1 && d.y0 > d.y1)
            d.x0 = d.x1 = d.y0 = d.y1 = 0;

        return d;
    }

    long long area() {
        return (long long)(y1 - y0) * (x1 - x0);
    }

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

istream& operator>>(istream& in, Dreptunghi& dr) {
    int x0, y0, x1, y1;

    in >> x0 >> y0 >> x1 >> y1;

    dr.x0 = min(x0, x1);
    dr.x1 = max(x0, x1);
    dr.y0 = min(y0, y1);
    dr.y1 = max(y0, y1);

    return in;
}

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

    Dreptunghi A, B, C;

    cin >> A >> B >> C;

    long long S = A.area() + B.area() + C.area() - (A+B).area() - (A+C).area() - (B+C).area() + (A+B+C).area();
    long long P = A.perim() + B.perim() + C.perim() - (A+B).perim() - (A+C).perim() - (B+C).perim() + (A+B+C).perim();

    cout << S << ' ' << P << endl;
}