Cod sursa(job #2665776)

Utilizator nicolaee2Martinescu Nicolae nicolaee2 Data 31 octombrie 2020 12:10:58
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<bits/stdc++.h>
#include<math.h>

using namespace std;

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

#define NMAX 100005

struct Punct
{
    long long x,y;
};

struct Dreptunghi
{
    Punct x,y;
    long long arie()
    {
        return (y.x-x.x)*(y.y-x.y);
    }
    long long perimetru()
    {
        return 2*(y.x-x.x) + 2*(y.y-x.y);
    }
};

Dreptunghi a[4];

Dreptunghi intersect(Dreptunghi d1,Dreptunghi d2)
{
    Punct x,y;
    x.x = max(d1.x.x,d2.x.x);
    x.y = max(d1.x.y,d2.x.y);
    y.x = min(d1.y.x,d2.y.x);
    y.y = min(d1.y.y,d2.y.y);

    Dreptunghi sol;
    if(x.x > y.x || x.y > y.y)
    {
        sol.x = {0,0};
        sol.y = {0,0};
    }
    else
    {
        sol.x = x;
        sol.y = y;
    }

    return sol;

}



int main()
{
    for(int i=1;i<=3;i++)
    {
        fin>>a[i].x.x>>a[i].x.y>>a[i].y.x>>a[i].y.y;
    }

    long long arie = 0;
    long long p = 0;
    for(int i=1;i<=3;i++)
    {
        arie += a[i].arie();
        p += a[i].perimetru();
    }
    for(int i=1;i<=3;i++)
    {
        for(int j=i+1;j<=3;j++)
        {
            Dreptunghi aux = intersect(a[i],a[j]);
            arie -= aux.arie();
            p -= aux.perimetru();
        }
    }

    Dreptunghi aux = intersect(intersect(a[1],a[2]),a[3]);
    arie += aux.arie();
    p += aux.perimetru();

    fout<<arie<<" "<<p;

}