Cod sursa(job #2196390)

Utilizator laraamy16Cioc Amelia laraamy16 Data 19 aprilie 2018 10:16:47
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("reuniune.in");
ofstream g ("reuniune.out");
struct drept
{
    int x0;
    int x1;
    int y0;
    int y1;
} v[4];
long long int A, P;
inline long long int arie (int i)
{
    long long a = 1LL * (v[i].x1 - v[i].x0) * (v[i].y1 - v[i].y0);
    return a;
}
inline long long int perimetru (int i)
{
    long long p = 2LL * (v[i].x1 + v[i].y1 - v[i].x0 - v[i].y0);
    return p;
}
int intersectie (int i, int j)
{
    v[0].x0 = max (v[i].x0, v[j].x0), v[0].x1 = min (v[i].x1, v[j].x1);
    if (v[0].x0 >= v[0].x1)
        return 0;
    v[0].y0 = max (v[i].y0, v[j].y0), v[0].y1 = min (v[i].y1, v[j].y1);
    if (v[0].y0 >= v[0].y1)
        return 0;
    return 1;
}
int main()
{

    f >> v[1].x0 >> v[1].y0 >> v[1].x1 >> v[1].y1;
    f >> v[2].x0 >> v[2].y0 >> v[2].x1 >> v[2].y1;
    f >> v[3].x0 >> v[3].y0 >> v[3].x1 >> v[3].y1;
    A += arie (1) + arie (2) + arie (3);
    P += perimetru (1) + perimetru (2) + perimetru (3);
    A -= intersectie (1, 2) * arie (0)+intersectie (1, 3) * arie (0)+intersectie (2, 3) * arie (0);
    A += intersectie (0, 1) * arie (0);

    P -= intersectie (1, 2) * perimetru (0)+intersectie (1, 3) * perimetru (0)+intersectie (2, 3) * perimetru (0);
    P += intersectie (0, 1) * perimetru (0);
    g << A << ' ' << P;
    return 0;
}