Cod sursa(job #1291489)

Utilizator diana97Diana Ghinea diana97 Data 12 decembrie 2014 21:16:48
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f ("reuniune.in");
ofstream g ("reuniune.out");

struct Dreptunghi {
    long long x, y, z, t;
} dreptunghi[4];

void citeste () {
    for (int i = 1; i <= 3; i++)
        f >> dreptunghi[i].x >> dreptunghi[i].y >> dreptunghi[i].z >> dreptunghi[i].t;
}

inline long long perimetru(Dreptunghi d) {
    return 2 * (d.z - d.x + d.t - d.y);
}

inline long long arie(Dreptunghi d) {
    return (d.z - d.x) * (d.t - d.y);
}

inline Dreptunghi intersectie(Dreptunghi a, Dreptunghi b) {
    Dreptunghi sol;
    sol.x = max(a.x, b.x);
    sol.y = max(a.y, b.y);
    sol.z = min(a.z, b.z);
    sol.t = min(a.t, b.t);
    if (sol.x > sol.z || sol.y > sol.t)
        sol.x = sol.y = sol.z = sol.t = 0;
    return sol;
}

void rezolva() {
    long long arie_reuniune = arie(dreptunghi[1]) + arie(dreptunghi[2]) + arie(dreptunghi[3]) -
                              arie(intersectie(dreptunghi[1], dreptunghi[2])) -
                              arie(intersectie(dreptunghi[2], dreptunghi[3])) -
                              arie(intersectie(dreptunghi[3], dreptunghi[1])) +
                              arie(intersectie(intersectie(dreptunghi[1], dreptunghi[2]), dreptunghi[3]));

    long long perimetru_reuniune = perimetru(dreptunghi[1]) + perimetru(dreptunghi[2]) + perimetru(dreptunghi[3]) -
                                   perimetru(intersectie(dreptunghi[1], dreptunghi[2])) -
                                   perimetru(intersectie(dreptunghi[2], dreptunghi[3])) -
                                   perimetru(intersectie(dreptunghi[3], dreptunghi[1])) +
                                   perimetru(intersectie(intersectie(dreptunghi[1], dreptunghi[2]), dreptunghi[3]));

    g << arie_reuniune << ' ' << perimetru_reuniune << '\n';
}

int main() {
    citeste();
    rezolva();
    return 0;
}