Cod sursa(job #2495442)

Utilizator SochuDarabaneanu Liviu Eugen Sochu Data 19 noiembrie 2019 13:36:31
Problema Reuniune Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <bits/stdc++.h>
#define LIMIT 1000000005

using namespace std;

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

struct Rectangle
{
    int x , y , x1 , y1;
}a[4];

Rectangle Common_Aria(Rectangle a , Rectangle b)
{
    Rectangle r = {max(a.x , b.x) , max(a.y , b.y) , min(b.x1 , a.x1) , min(a.y1 , b.y1)};

    if(r.x >= a.x && r.x <= a.x1 && r.x >= b.x && r.x <= b.x1)
    {
        if(r.x1 >= a.x && r.x1 <= a.x1 && r.x1 >= b.x && r.x1 <= b.x1)
        {
            if(r.y >= a.y && r.y <= a.y1 && r.y >= b.y && r.y <= b.y1)
            {
                if(r.y1 >= a.y && r.y1 <= a.y1 && r.y1 >= b.y && r.y1 <= b.y1)
                    return r;
            }
        }
    }

    return {LIMIT , 0 , 0 , 0};
}

long long Get_Aria(Rectangle a)
{
    if(a.x == LIMIT)
        return 0;

    return (a.x1 - a.x) * (a.y1 - a.y);
}

long long Get_Perimeter(Rectangle a)
{
    if(a.x == LIMIT)
        return 0;

    return ((a.x1 - a.x) + (a.y1 - a.y)) * 2;
}

int main()
{
    long long aria = 0, perimeter = 0;

    for(short i = 1 ; i <= 3 ; i++)
    {
        f >> a[i].x >> a[i].y >> a[i].x1 >> a[i].y1;

        perimeter += Get_Perimeter(a[i]);
        aria += Get_Aria(a[i]);
    }

    aria -= Get_Aria(Common_Aria(a[1] , a[2])) + Get_Aria(Common_Aria(a[1] , a[3])) + Get_Aria(Common_Aria(a[2] , a[3])) - Get_Aria(Common_Aria(a[1] , Common_Aria(a[2] , a[3])));
    perimeter -= Get_Perimeter(Common_Aria(a[1] , a[2])) + Get_Perimeter(Common_Aria(a[1] , a[3])) + Get_Perimeter(Common_Aria(a[2] , a[3])) - Get_Perimeter(Common_Aria(a[1] , Common_Aria(a[2] , a[3])));

    g << aria << ' ' << perimeter;

    return 0;
}