Cod sursa(job #2479636)

Utilizator davidcotigacotiga david davidcotiga Data 24 octombrie 2019 09:39:48
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream cin("reuniune.in");
ofstream cout("reuniune.out");

//int x1, y1, x2, y2;

struct dreptunghi{
    long long x, y, x2, y2;
    long long arie(){
        return 1LL * (x2 - x) * (y2 - y);
    }
    long long per() {
        return ((x2 - x) + (y2 - y)) * 2LL;
    }
};


bool isOK(long long x, long long y, dreptunghi a) {
    return x >= a.x && x <= a.x2 && y >= a.y && y <= a.y2;
}

dreptunghi dr1, dr2, dr3, dr12, dr13, dr23, dr123;


dreptunghi seIntersecteaza(dreptunghi a, dreptunghi b) {
    dreptunghi dr = {0, 0, 0, 0};
    int maxx1, maxx2, min1, min2;
    maxx1 = max(a.x, b.x);
    maxx2 = max(a.y, b.y);
    min1 = min(a.x2, b.x2);
    min2 = min(a.y2, b.y2);
    if (maxx1 <= min1 && maxx2 <= min2)
    {
        dr = {maxx1, maxx2, min1, min2};
    }
    return dr;
}

int main() {
	cin >> dr1.x >> dr1.y >> dr1.x2 >> dr1.y2;
    cin >> dr2.x >> dr2.y >> dr2.x2 >> dr2.y2;
    cin >> dr3.x >> dr3.y >> dr3.x2 >> dr3.y2;

    dr12 = seIntersecteaza(dr1, dr2);
    dr123 = seIntersecteaza(dr12, dr3);
    dr23 = seIntersecteaza(dr2, dr3);
    dr13 = seIntersecteaza(dr1, dr3);

    long long arie = dr1.arie() + dr2.arie() + dr3.arie() - dr12.arie() - dr13.arie() - dr23.arie() + dr123.arie();
    long long perimetru = dr1.per() + dr2.per() + dr3.per() - dr12.per() - dr23.per() - dr13.per() + dr123.per();

    cout << arie << " " << perimetru;

	return 0;
}