Cod sursa(job #1376456)

Utilizator retrogradLucian Bicsi retrograd Data 5 martie 2015 17:28:32
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<fstream>

using namespace std;
typedef int64_t var;

ifstream fin("reuniune.in");
ofstream fout("reuniune.out");

struct Drept {
    var x1, x2, y1, y2;
    Drept(var a, var b, var c, var d) {
        x1 = a;
        x2 = b;
        y1 = c;
        y2 = d;
    }
    Drept() {
        x1 = x2 = y1 = y2 = 0;
    }
};


Drept intersect(Drept d1, Drept d2) {
    var x1 = d1.x1, x2 = d1.x2,
        x3 = d2.x1, x4 = d2.x2;
    var y1 = d1.y1, y2 = d1.y2,
        y3 = d2.y1, y4 = d2.y2;

    var xr = max(x1, x3),
        xrp = min(x2, x4);

    if(xr > xrp) return Drept();

    var yr = max(y1, y3),
        yrp = min(y2, y4);

    if(yr > yrp) return Drept();

    return Drept(xr, xrp, yr, yrp);
}

var A(Drept d) {
    return (d.x2 - d.x1)*(d.y2 - d.y1);
}

var P(Drept d) {
    return 2*((d.x2 - d.x1) + (d.y2 - d.y1));
}


int main() {
    Drept d[4];
    for(var i=1; i<=3; i++) {
        fin>>d[i].x1>>d[i].y1>>d[i].x2>>d[i].y2;
    }

    Drept i1 = intersect(d[1], d[2]),
          i2 = intersect(d[2], d[3]),
          i3 = intersect(d[1], d[3]),
          i4 = intersect(i1, d[3]);

    fout << A(d[1]) + A(d[2]) + A(d[3]) - A(i1) - A(i2) - A(i3) + A(i4)<<" ";
    fout << P(d[1]) + P(d[2]) + P(d[3]) - P(i1) - P(i2) - P(i3) + P(i4);

    return 0;
}