Cod sursa(job #1363008)

Utilizator delia_99Delia Draghici delia_99 Data 26 februarie 2015 17:40:15
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <cstdio>
#include <algorithm>
using namespace std;
struct rectangle
{
    int x1,y1,x2,y2;
};
rectangle r1,r2,r3,r12,r13,r23,r123;
long long A,P;

rectangle two(rectangle a,rectangle b)
{
    int X1,X2,Y1,Y2;
    rectangle sol;
    X1=max(a.x1,b.x1);
    X2=min(a.x2,b.x2);
    Y1=max(a.y1,b.y1);
    Y2=min(a.y2,b.y2);
    sol.x1=X1;
    sol.x2=X2;
    sol.y1=Y1;
    sol.y2=Y2;
    if(b.x2<a.x1 || a.x2<b.x1 || b.y2<a.y1 || a.y2<b.y1)
    {
        sol.x1=0;
        sol.x2=0;
        sol.y1=0;
        sol.y2=0;
    }
    return sol;

}

int area(rectangle a)
{
    return abs((a.x1-a.x2)*(a.y1-a.y2));
}

int perimeter(rectangle a)
{
    return 2*(abs(a.x1-a.x2)+abs(a.y1-a.y2));
}

int main()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    scanf("%d %d %d %d\n%d %d %d %d\n%d %d %d %d\n",&r1.x1,&r1.y1,&r1.x2,&r1.y2,&r2.x1,&r2.y1,&r2.x2,&r2.y2,&r3.x1,&r3.y1,&r3.x2,&r3.y2);
    r12=two(r1,r2);
    r13=two(r1,r3);
    r23=two(r2,r3);
    r123=two(r12,r3);
    A=area(r1)+area(r2)+area(r3)-area(r12)-area(r13)-area(r23)+area(r123);
    P=perimeter(r1)+perimeter(r2)+perimeter(r3)-perimeter(r12)-perimeter(r13)-perimeter(r23)+perimeter(r123);
    printf("%lld %lld\n",A,P);

    return 0;
}