Cod sursa(job #68981)

Utilizator FlorianFlorian Marcu Florian Data 30 iunie 2007 15:35:30
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.41 kb
#include<stdio.h>
#include<stdlib.h>
typedef struct
        {
        long long x,y,z,t;
        }dreptunghi;
FILE*f=fopen("reuniune.in","r");
FILE*g=fopen("reuniune.out","w");
dreptunghi a,b,c;
void read()
        {
        fscanf(f,"%lld %lld %lld %lld",&a.x,&a.y,&a.z,&a.t);
        fscanf(f,"%lld %lld %lld %lld",&b.x,&b.y,&b.z,&b.t);
        fscanf(f,"%lld %lld %lld %lld",&c.x,&c.y,&c.z,&c.t);
        }
long long arie(long long x,long long y, long long z, long long t)
        {
        long long area;
        if(z-x<0) return 0;
        if (t-y<0) return 0;
        area=(z-x)*(t-y);
        return (area);
        }
long long max(long long a, long long b)
        {
        if(a>b) return a;
        return b;
        }
long long min(long long a, long long b)
        {
        if(a<b) return a;
        return b;
        }
long long perimetru(long long a, long long b, long long c, long long d)
        {
        if(c-a<0) return 0;
        if(d-b<0) return 0;
        long long p=2*(c-a+d-b);
        return p;
        }
long long max2(long long a, long long b, long long c)
        {
        if(a>b&&a>c) return a;
        else if (b>c&&b>a) return b;
        else return c;
        }
long long min2(long long a, long long b, long long c)
        {
        if(a<b&&a<c) return a;
        else if (b<c&&b<a) return b;
        else return c;
       }

void solve()
        {
        long long m,n,p,q,area=0,perim;
        area=arie(a.x,a.y,a.z,a.t)+arie(b.x,b.y,b.z,b.t)+arie(c.x,c.y,c.z,c.t);
        perim=perimetru(a.x,a.y,a.z,a.t)+perimetru(b.x,b.y,b.z,b.t)+perimetru(c.x,c.y,c.z,c.t);
        perim-=perimetru(max(a.x,b.x),max(a.y,b.y),min(a.z,b.z),min(a.t,b.t));
        perim-=perimetru(max(a.x,c.x),max(a.y,c.y),min(a.z,c.z),min(a.t,c.t));
        perim-=perimetru(max(c.x,b.x),max(c.y,b.y),min(c.z,b.z),min(c.t,b.t));
        perim+=perimetru(max2(a.x,b.x,c.x),max2(a.y,b.y,c.y),min2(a.z,b.z,c.z),min2(a.t,b.t,c.t));
        area-=arie(max(a.x,b.x),max(a.y,b.y),min(a.z,b.z),min(a.t,b.t));
        area-=arie(max(a.x,c.x),max(a.y,c.y),min(a.z,c.z),min(a.t,c.t));
        area-=arie(max(c.x,b.x),max(c.y,b.y),min(c.z,b.z),min(c.t,b.t));
        area+=arie(max2(a.x,b.x,c.x),max2(a.y,b.y,c.y),min2(a.z,b.z,c.z),min2(a.t,b.t,c.t));
        fprintf(g,"%lld %lld",area,perim);
        }
int main()
        {
        read();
        solve();
        return 0;
        }