Cod sursa(job #1015517)

Utilizator florin.elfusFlorin Elfus florin.elfus Data 24 octombrie 2013 19:50:51
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#include <utility>

using namespace std;

#define x first
#define y second

typedef long long i64;

struct base
{
    pair<i64, i64> p1;
    pair<i64, i64> p2;
};

void set(base& B)
{
    B.p1.x = B.p1.y = B.p2.x = B.p2.y = 0LL;
}
base intersect(const base& B1, const base& B2)
{
    base now;
    now.p1.x = max(B1.p1.x, B2.p1.x);
    now.p1.y = max(B1.p1.y, B2.p1.y);
    now.p2.x = min(B1.p2.x, B2.p2.x);
    now.p2.y = min(B1.p2.y, B2.p2.y);

    if (now.p1.x > now.p2.x || now.p1.y > now.p2.y) set(now);

    return now;
}
i64 area(const base& B)
{
    return (B.p2.x - B.p1.x) * (B.p2.y - B.p1.y);
}
i64 per(const base& B)
{
    return 2LL * (B.p2.x - B.p1.x) + 2LL * (B.p2.y - B.p1.y);
}

base D1, D2, D3;

int main()
{
    ifstream fin("reuniune.in");
    ofstream fout("reuniune.out");

    fin >> D1.p1.x >> D1.p1.y >> D1.p2.x >> D1.p2.y;
    fin >> D2.p1.x >> D2.p1.y >> D2.p2.x >> D2.p2.y;
    fin >> D3.p1.x >> D3.p1.y >> D3.p2.x >> D3.p2.y;

    fout << area(D1) + area(D2) + area(D3) - area(intersect(D1, D2)) - area(intersect(D1, D3)) - area(intersect(D2, D3)) + area(intersect(intersect(D1, D2), D3)) << ' ';
    fout << per(D1) + per(D2) + per(D3) - per(intersect(D1, D2)) - per(intersect(D1, D3)) - per(intersect(D2, D3)) + per(intersect(intersect(D1, D2), D3));

    fin.close();
    fout.close();
}