Cod sursa(job #965528)

Utilizator ericptsStavarache Petru Eric ericpts Data 24 iunie 2013 08:33:17
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <cstdio>
#include <algorithm>

using namespace std;

struct drunghi{
    int x0,y0;
    int x1,y1;
}v[3];

int area(const drunghi & P)
{
    const int dx = P.x1 - P.x0;
    const int dy = P.y1 - P.y0;
    return dx * dy;
}

int perim(const drunghi &P)
{
    const int dx = P.x1 - P.x0;
    const int dy = P.y1 - P.y0;
    return 2*(dx + dy);
}

drunghi intersect(const drunghi &a,const drunghi &b)
{
    drunghi ret;

    ret.x0 = max(a.x0,b.x0);
    ret.x1 = min(a.x1,b.x1);

    ret.y0 = max(a.y0,b.y0);
    ret.y1 = min(a.y1,b.y1);

    if(ret.x1 < ret.x0 || ret.y1 < ret.y0)
        return {0,0,0,0};
    else return ret;
}

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

    int i;
    int show_area = 0;
    int show_perim = 0;

    for(i = 0 ; i < 3 ; ++ i){
        scanf("%d%d%d%d",&v[i].x0,&v[i].y0,&v[i].x1,&v[i].y1);
        show_area += area(v[i]);
        show_perim += perim(v[i]);
    }
    drunghi x;

    x = intersect(v[0],v[1]);

    show_area -= area(x);
    show_perim -= perim(x);

    x = intersect(v[1],v[2]);

    show_area -= area(x);
    show_perim -= perim(x);

    x = intersect(v[0],v[2]);

    show_area -= area(x);
    show_perim -= perim(x);

    x = intersect(x,v[1]);

    show_area += area(x);
    show_perim += perim(x);

    printf("%d %d\n",show_area,show_perim);
    return 0;
}