Cod sursa(job #2458452)

Utilizator petrisorvmyVamanu Petru Gabriel petrisorvmy Data 20 septembrie 2019 17:19:47
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<bits/stdc++.h>
#define NMAX 100001
#define ll long long

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

struct drept
{
    ll x1, x2, y1, y2, arie, perimetru;
};
drept d1, d2, d3 ,d12, d23, d13, dtot;
void citire(drept &d)
{
    f >> d.x1 >> d.y1 >> d.x2 >> d.y2;
}
void calcul(drept &d)
{
    if(d.x1 > d.x2 || d.y1 > d.y2)
        return;
    d.arie = abs(d.x1 - d.x2) * abs(d.y1 - d.y2);
    d.perimetru = (abs(d.x1 - d.x2) + abs(d.y1 - d.y2)) * 2;
}
void inters(drept &a, drept &b, drept &c)
{
    c.x1 = max(a.x1, b.x1);
    c.y1 = max(a.y1, b.y1);
    c.x2 = min(a.x2, b.x2);
    c.y2 = min(a.y2, b.y2);
    calcul(c);
}
int main()
{
    citire(d1); calcul(d1);
    citire(d2); calcul(d2);
    citire(d3); calcul(d3);
    inters(d1,d2,d12);
    inters(d2,d3,d23);
    inters(d1,d3,d13);
    inters(d12,d13,dtot);
    g << d1.arie + d2.arie + d3.arie - d12.arie - d23.arie - d13.arie + dtot.arie << ' ';
    g << d1.perimetru + d2.perimetru + d3.perimetru - d12.perimetru - d23.perimetru - d13.perimetru + dtot.perimetru;
    f.close();
    g.close();
    return 0;
}