Cod sursa(job #844164)

Utilizator assa98Andrei Stanciu assa98 Data 28 decembrie 2012 21:17:56
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <cstdio>
#include <cstdlib>
#include <algorithm>

using namespace std;

struct punct
{
    int x,y;
};

struct dr
{
    punct a,b,c,d;
} d1,d2,d3,d4,d5,d6,d7;

dr intersectie(dr k,dr l)
{
    dr inters;

    inters.a.x=max(k.a.x,l.a.x);
    inters.d.x=inters.a.x;

    inters.b.x=min(k.b.x,l.b.x);
    inters.c.x=inters.b.x;

    inters.a.y=max(k.a.y,l.a.y);
    inters.b.y=inters.a.y;

    inters.c.y=min(k.c.y,l.c.y);
    inters.d.y=inters.c.y;

    return inters;
}

long long arie(dr d)
{
    long long l,L;
    l=abs((long long)d.d.y-d.a.y);
    L=abs((long long)d.b.x-d.a.x);
    return L*l;
}

long long per(dr d)
{

    long long l,L;
    l=abs((long long)d.d.y-d.a.y);
    L=abs((long long)d.b.x-d.a.x);
    return (L+l)*2;
}

int main()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);

    scanf("%d%d%d%d",&d1.a.x,&d1.a.y,&d1.c.x,&d1.c.y);
    d1.d.x=d1.a.x;
    d1.d.y=d1.c.y;
    d1.b.x=d1.c.x;
    d1.b.y=d1.a.y;

    scanf("%d%d%d%d",&d2.a.x,&d2.a.y,&d2.c.x,&d2.c.y);
    d2.d.x=d2.a.x;
    d2.d.y=d2.c.y;
    d2.b.x=d2.c.x;
    d2.b.y=d2.a.y;

    scanf("%d%d%d%d",&d3.a.x,&d3.a.y,&d3.c.x,&d3.c.y);
    d3.d.x=d3.a.x;
    d3.d.y=d3.c.y;
    d3.b.x=d3.c.x;
    d3.b.y=d3.a.y;

    d4=intersectie(d1,d2);
    d5=intersectie(d2,d3);
    d6=intersectie(d1,d3);

    d7=intersectie(d4,d5);
    d7=intersectie(d7,d6);

    //printf("%lld %lld\n",arie(d7),per(d7));

    long long A=arie(d1)+arie(d2)+arie(d3)-arie(d4)-arie(d5)-arie(d6)+arie(d7);
    long long P=per(d1)+per(d2)+per(d3)-per(d4)-per(d5)-per(d6)+per(d7);
    printf("%lld ",A);
    printf("%lld ",P);
    return 0;
}