Cod sursa(job #2465856)

Utilizator chriss_b_001Cristian Benghe chriss_b_001 Data 30 septembrie 2019 22:46:48
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

ifstream f("reuniune.in");
ofstream g("reuniune.out");

struct punct
{
    int x, y;
};

long long arie(punct a, punct b)
{
    if(a.x <= b.x && a.y <= b.y)
        return 1LL * abs(a.x - b.x) * abs(a.y - b.y);
    else return 0;
}

long long perim(punct a, punct b)
{
    if(a.x <= b.x && a.y <= b.y)
        return 1LL * abs(a.x - b.x) * 2 + abs(a.y - b.y) * 2;
    else return 0;
}

void inters(punct a1, punct a2, punct b1, punct b2, punct &r1, punct &r2)
{
    r1.x = max(a1.x, b1.x);
    r2.x = min(a2.x, b2.x);
    r1.y = max(a1.y, b1.y);
    r2.y = min(a2.y, b2.y);
}

int main()
{
    punct a1, a2, b1, b2, c1, c2;
    f >> a1.x >> a1.y >> a2.x >> a2.y;
    f >> b1.x >> b1.y >> b2.x >> b2.y;
    f >> c1.x >> c1.y >> c2.x >> c2.y;


    punct ab1, ab2, ac1, ac2, bc1, bc2, r1, r2;

    inters(a1, a2, b1, b2, ab1, ab2);
    inters(a1, a2, c1, c2, ac1, ac2);
    inters(c1, c2, b1, b2, bc1, bc2);

    ///cout<<ab1.x<<' '<<ab1.y<<' '<<ab2.x<<' '<<ab2.y<<endl;
//    cout<<bc1.x<<' '<<bc1.y<<' '<<bc2.x<<' '<<bc2.y<<endl;
//    cout<<ac1.x<<' '<<ac1.y<<' '<<ac2.x<<' '<<ac2.y<<endl;

    inters(ab1, ab2, c1, c2, r1, r2);

    ///cout<<r1.x<<r1.y<<r2.x<<r2.y;

    g << arie(a1, a2) + arie(b1, b2) + arie(c1, c2) -
      arie(ab1, ab2) - arie(ac1, ac2) - arie(bc1, bc2) + arie(r1, r2) << ' ';
    g << perim(a1, a2) + perim(b1, b2) + perim(c1, c2) -
      perim(ab1, ab2) - perim(ac1, ac2) - perim(bc1, bc2) + perim(r1, r2);
    return 0;
}