Cod sursa(job #2458821)

Utilizator ciutanpCiuta Andrei Calin ciutanp Data 21 septembrie 2019 16:10:50
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<bits/stdc++.h>
#define NAX 200005
using namespace std;
using ll = long long;
const int INF = 1e9 + 5;
void self_max(ll &a, ll b)
{
    a = max(a, b);
}
void self_min(int &a, int b)
{
    a = min(a, b);
}

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

struct dr
{
    ll x, y, x1, y1, arie, peri;
}v[ 6 ];

void calc(int i)
{
    if( v[ i ].x > v[ i ].x1 || v[ i ].y > v[ i ].y1)
        return;
    v[ i ].arie = abs( v[ i ].x - v[ i ].x1 ) * abs( v[ i ].y - v[ i ].y1);
    v[ i ].peri = 2 * (abs( v[ i ].x - v[ i ].x1 ) +  abs( v[ i ].y - v[ i ].y1));
}

void citeste(int i)
{
    f >> v[ i ].x >> v[ i ].y >> v[ i ].x1 >> v[ i ].y1;
    calc( i );
}

void inter(int i, int j, int k)
{
    v[ k ].x = max( v[ i ].x, v[ j ].x);
    v[ k ].y = max( v[ i ].y, v[ j ].y);
    v[ k ].x1 = min( v[ i ].x1, v[ j ].x1);
    v[ k ].y1 = min( v[ i ].y1, v[ j ].y1);
    calc( k );
}
ll arie_s, peri_s;

int main()
{
    ios_base::sync_with_stdio(0);
    f.tie(0);

    for(int i = 0 ; i < 3 ; ++i)
        citeste( i );
    for(int i = 0 ; i < 3 ; ++i)
    {
        arie_s += v[ i ].arie;
        peri_s += v[ i ].peri;
    }
    inter(0, 1, 3);
    arie_s -= v[ 3 ].arie;
    peri_s -= v[ 3 ].peri;
    inter(0, 2, 4);
    arie_s -= v[ 4 ].arie;
    peri_s -= v[ 4 ].peri;
    inter(1, 2, 5);
    arie_s -= v[ 5 ].arie;
    peri_s -= v[ 5 ].peri;
    inter(3, 2, 3);
    arie_s += v[ 3 ].arie;
    peri_s += v[ 3 ].peri;
    g << arie_s << ' ' << peri_s;

    return 0;
}