Cod sursa(job #1401087)

Utilizator tudor_bonifateTudor Bonifate tudor_bonifate Data 25 martie 2015 17:27:06
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <cstdio>
#include <algorithm>
using namespace std;
struct dreptunghi
{
    int xi;
    int yi;
    int xf;
    int yf;
};
long long arie(dreptunghi a)
{
    int s=1LL*(a.xi-a.xf)*(a.yi-a.yf);
    if (s<0) return -s;
    else return s;
}
long long perimetru(dreptunghi a)
{
    int p=2*(1LL*abs(a.xi-a.xf)+1LL*abs(a.yi-a.yf));
    return p;
}
dreptunghi intersectie(dreptunghi a, dreptunghi b)
{
    long long X1=max(a.xi,b.xi);
    long long X2=min(a.xf,b.xf);
    long long Y1=max(a.yi,b.yi);
    long long Y2=min(a.yf,b.yf);
    dreptunghi sol;
    sol.xi=X1;
    sol.xf=X2;
    sol.yi=Y1;
    sol.yf=Y2;
    if (b.xf<a.xi || a.xf<b.xi || b.yf<a.yi || a.yf<b.yi)
    {
        sol.xi=0;
        sol.xf=0;
        sol.yi=0;
        sol.yf=0;
    }
    return sol;
}
dreptunghi d1,d2,d3,d12,d23,d13,d123;
long long arief, perimetruf;
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",&d1.xi,&d1.yi,&d1.xf,&d1.yf,&d2.xi,&d2.yi,&d2.xf,&d2.yf,&d3.xi,&d3.yi,&d3.xf,&d3.yf);
    d12=intersectie(d1,d2);
    d23=intersectie(d2,d3);
    d13=intersectie(d1,d3);
    d123=intersectie(d12,d3);
    arief=arie(d1)+arie(d2)+arie(d3)-arie(d12)-arie(d13)-arie(d23)+arie(d123);
    perimetruf=perimetru(d1)+perimetru(d2)+perimetru(d3)-perimetru(d12)-perimetru(d13)-perimetru(d23)+perimetru(d123);
    printf("%lld %lld",arief,perimetruf);
    return 0;
}