Cod sursa(job #3217735)

Utilizator paull122Paul Ion paull122 Data 24 martie 2024 14:51:01
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <bits/stdc++.h>
#define ll long long int
using namespace std;

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

ll mx(ll a,ll b,ll c)
{
	return max(max(a,b),c);
}
ll mn(ll a,ll b,ll c)
{
	return min(min(a,b),c);
}
struct dr
{
		ll x1,y1,x2,y2;
};

ll getArea(dr a)
{
		return (a.x2-a.x1)*(a.y2-a.y1);
}
ll getPerim(dr a)
{
		return ((a.x2-a.x1)+(a.y2-a.y1))*2ll;
}
dr intersection(dr a,dr b)
{
    if(a.x1 > b.x2 || b.x1 > a.x2 || a.y1 > b.y2 || b.y1 > a.y2)
		{
        return {0,0,0,0};
		}
    return {max(a.x1,b.x1),max(a.y1,b.y1),min(a.x2,b.x2),min(a.y2,b.y2)};
}
bool nul(dr a)
{
	return !a.x1 && !a.x2 && !a.y1 && !a.y2;
}
dr intersection2(dr a,dr b,dr c)
{
    if(nul(intersection(a,b)) || nul(intersection(b,c)) || nul(intersection(a,c)))
		{
    		return {0,0,0,0};
		}
    return {mx(a.x1,b.x1,c.x1),mx(a.y1,b.y1,c.y1),mn(a.x2,b.x2,c.x2),mn(a.y2,b.y2,c.y2)};
}
int main()
{
  dr a,b,c;
  fin >> a.x1 >> a.y1 >> a.x2 >> a.y2;
  fin >> b.x1 >> b.y1 >> b.x2 >> b.y2;
  fin >> c.x1 >> c.y1 >> c.x2 >> c.y2;

	ll res=0;
	res = getArea(a) + getArea(b) + getArea(c) - getArea(intersection(a,b)) - getArea(intersection(b,c)) - getArea(intersection(a,c)) + getArea(intersection2(a,b,c));
	fout << res <<  " ";

	res = getPerim(a) + getPerim(b) + getPerim(c) - getPerim(intersection(a,b)) - getPerim(intersection(b,c)) - getPerim(intersection(a,c)) + getPerim(intersection2(a,b,c));
	fout << res;
}