Cod sursa(job #2019103)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 6 septembrie 2017 22:31:35
Problema Reuniune Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <stdio.h>
#include <stdlib.h>
struct dreptunghi
{
    int x1,y1,x2,y2;
}v[4];
int max(int a,int b)
{
    if(a>b) return a;
    return b;
}
int min(int a,int b)
{
    if(a<b) return a;
    return b;
}
int main()
{
    int i,j,k;
    long long rez=0,per=0;
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    for(i=1; i<=3; i++)
        scanf("%d%d%d%d",&v[i].x1,&v[i].y1,&v[i].x2,&v[i].y2);
    for(i=1; i<=3; i++)
        rez+=(long long)(v[i].x2-v[i].x1)*(v[i].y2-v[i].y1);
    for(i=1; i<3; i++)
        for(j=i+1; j<=3; j++)
            if(min(v[j].x2,v[i].x2)-max(v[j].x1,v[i].x1)>=0 && min(v[j].y2,v[i].y2)-max(v[j].y1,v[i].y1)>=0)
                rez-=(long long)(min(v[j].x2,v[i].x2)-max(v[j].x1,v[i].x1))*(min(v[j].y2,v[i].y2)-max(v[j].y1,v[i].y1));
    i=1,j=2,k=3;
    if(min(v[k].x2,min(v[j].x2,v[i].x2))-max(v[k].x1,max(v[j].x1,v[i].x1))>=0 && min(v[k].y2,min(v[j].y2,v[i].y2))-max(v[k].y1,max(v[j].y1,v[i].y1))>=0)
        rez+=(long long)(min(v[k].x2,min(v[j].x2,v[i].x2))-max(v[k].x1,max(v[j].x1,v[i].x1)))*(min(v[k].y2,min(v[j].y2,v[i].y2))-max(v[k].y1,max(v[j].y1,v[i].y1)));
    printf("%lld ",rez);
    for(i=1; i<=3; i++)
        per+=(long long)2*(v[i].x2-v[i].x1)+2LL*(v[i].y2-v[i].y1);
    for(i=1; i<3; i++)
        for(j=i+1; j<=3; j++)
            if(min(v[j].x2,v[i].x2)-max(v[j].x1,v[i].x1)>=0 && min(v[j].y2,v[i].y2)-max(v[j].y1,v[i].y1)>=0)
                per-=(long long)2*(min(v[j].x2,v[i].x2)-max(v[j].x1,v[i].x1))+2LL*(min(v[j].y2,v[i].y2)-max(v[j].y1,v[i].y1));
    i=1,j=2,k=3;
    if(min(v[k].x2,min(v[j].x2,v[i].x2))-max(v[k].x1,max(v[j].x1,v[i].x1))>=0 && min(v[k].y2,min(v[j].y2,v[i].y2))-max(v[k].y1,max(v[j].y1,v[i].y1))>=0)
        per+=(long long)2*(min(v[k].x2,min(v[j].x2,v[i].x2))-max(v[k].x1,max(v[j].x1,v[i].x1)))+2LL*(min(v[k].y2,min(v[j].y2,v[i].y2))-max(v[k].y1,max(v[j].y1,v[i].y1)));
    printf("%lld ",per);

    return 0;
}