Cod sursa(job #1246591)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 21 octombrie 2014 12:45:51
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <stdio.h>
long long int x1[3],x2[3];
long long int y1[3],y2[3];
int max(int a,int b)
{
    if(a>b) return a;
    return b;
}
int min(int a,int b)
{
    if(a>b) return b;
    return a;
}
int scan(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)
{
    if(x1>x4) return 1;
    if(x2<x3) return 1;
    if(y2<y3) return 1;
    if(y1>y4) return 1;
    return 0;
}
int main()
{
    bool as=0;
    long long int s=0,p=0;
    FILE *fin,*fout;
    fin=fopen("reuniune.in","r");
    fout=fopen("reuniune.out","w");
    for(int i=0;i<3;i++)
    {
        fscanf(fin,"%lld %lld %lld %lld",&x1[i],&y1[i],&x2[i],&y2[i]);
        s+=(x2[i]-x1[i])*(y2[i]-y1[i]);
        p+=((x2[i]-x1[i])*2+(y2[i]-y1[i])*2);
    }
    long long int x5=0,y5=0,y6=0,x6=0;
    if(scan(x1[0],y1[0],x2[0],y2[0],x1[1],y1[1],x2[1],y2[1])==0)
    {
        x5=max(x1[0],x1[1]);
        y5=max(y1[0],y1[1]);
        x6=min(x2[0],x2[1]);
        y6=min(y2[0],y2[1]);
        s-=(x6-x5)*(y6-y5);
        p-=((x6-x5)*2+(y6-y5)*2);
    }
    else as=1;
    if(scan(x1[1],y1[1],x2[1],y2[1],x1[2],y1[2],x2[2],y2[2])==0)
    {
        x5=max(x1[1],x1[2]);
        y5=max(y1[1],y1[2]);
        x6=min(x2[1],x2[2]);
        y6=min(y2[1],y2[2]);
        s-=(x6-x5)*(y6-y5);
        p-=((x6-x5)*2+(y6-y5)*2);
    }
    else as=1;
    if(scan(x1[0],y1[0],x2[0],y2[0],x1[2],y1[2],x2[2],y2[2])==0)
    {
        x5=max(x1[0],x1[2]);
        y5=max(y1[0],y1[2]);
        x6=min(x2[0],x2[2]);
        y6=min(y2[0],y2[2]);
        s-=(x6-x5)*(y6-y5);
        p-=((x6-x5)*2+(y6-y5)*2);
    }
    else as=1;
    if(as==0)
    {
        x5=max(x5,x1[1]);
        y5=max(y5,y1[1]);
        x6=min(x6,x2[1]);
        y6=min(y6,y2[1]);
        s+=(x6-x5)*(y6-y5);
        p+=((x6-x5)*2+(y6-y5)*2);
    }
    fprintf(fout,"%lld %lld",s,p);
}