Pagini recente » Cod sursa (job #1983557) | Cod sursa (job #1978426) | Cod sursa (job #3176597) | Cod sursa (job #2027759) | Cod sursa (job #2585155)
#include <fstream>
#include <stdlib.h>
using namespace std;
ifstream f("reuniune.in");
ofstream g("reuniune.out");
long long int arieTotal, perimetruTotal;
struct hh{
int x1, y1;
int x2, y2;
};
hh dr[5], rez;
long long int getLen(int x, int y)
{
if(x >= 0 && y >= 0)
return y - x;
if(x < 0 && y < 0)
return x - y;
return abs(x) + abs(y);
}
long long int Arie(hh a)
{
int x1 = a.x1, x2 = a.x2;
int y1 = a.y1, y2 = a.y2;
int height = getLen(y1, y2);
int length = getLen(x1, x2);
return height * length;
}
long long int Perimetru(hh a)
{
int x1 = a.x1, x2 = a.x2;
int y1 = a.y1, y2 = a.y2;
int height = getLen(y1, y2);
int length = getLen(x1, x2);
return 2 * (height + length);
}
void getDreptunghi(hh a, hh b)
{
rez.x1 = max(a.x1, b.x1);
rez.x2 = min(a.x2, b.x2);
rez.y1 = max(a.y1, b.y1);
rez.y2 = min(a.y2, b.y2);
if(rez.x1 > rez.x2 || rez.y1 > rez.y2)
rez.x1 = 0, rez.x2 = 0, rez.y1 = 0, rez.y2 = 0;
}
int main()
{
for(int i = 1; i <= 3; i++)
{
f >> dr[i].x1 >> dr[i].y1 >> dr[i].x2 >> dr[i].y2;
arieTotal += Arie(dr[i]);
perimetruTotal += Perimetru(dr[i]);
}
for(int i = 1; i <= 3; i++)
{
for(int j = i + 1; j <= 3; j++)
{
getDreptunghi(dr[i], dr[j]);
arieTotal -= Arie(rez);
perimetruTotal -= Perimetru(rez);
}
}
getDreptunghi(dr[1], rez);
arieTotal += Arie(rez);
perimetruTotal += Perimetru(rez);
g << arieTotal << " " << perimetruTotal << "\n";
return 0;
}