Pagini recente » Cod sursa (job #982771) | Cod sursa (job #2220972) | Cod sursa (job #1998956) | Cod sursa (job #1665739) | Cod sursa (job #783015)
Cod sursa(job #783015)
#include <fstream>
using namespace std;
const char InFile[]="reuniune.in";
const char OutFile[]="reuniune.out";
ifstream fin(InFile);
ofstream fout(OutFile);
struct Interval
{
Interval(long long min=0, long long max=0):min(min),max(max){Check();}
void Check()
{
if(min>max)
{
swap(min,max);
}
}
inline long long Length()
{
return max-min;
}
inline void Intersect(const Interval &inter)
{
min=::max(min,inter.min);
max=::min(max,inter.max);
}
long long min,max;
};
struct AABB
{
AABB(Interval X=Interval(), Interval Y=Interval()):X(X),Y(Y){}
Interval X,Y;
inline long long Area()
{
if(X.min>X.max || Y.min>Y.max)
{
return 0;
}
return X.Length()*Y.Length();
}
inline long long Perimeter()
{
if(X.min>X.max || Y.min>Y.max)
{
return 0;
}
return (X.Length()+Y.Length())<<1;
}
inline void Intersect(const AABB &rect)
{
X.Intersect(rect.X);
Y.Intersect(rect.Y);
}
};
long long X0,Y0,X1,Y1;
int main()
{
fin>>X0>>Y0>>X1>>Y1;
AABB A(Interval(X0,X1),Interval(Y0,Y1));
fin>>X0>>Y0>>X1>>Y1;
AABB B(Interval(X0,X1),Interval(Y0,Y1));
fin>>X0>>Y0>>X1>>Y1;
AABB C(Interval(X0,X1),Interval(Y0,Y1));
fin.close();
AABB AB=A;
AB.Intersect(B);
AABB BC=B;
BC.Intersect(C);
AABB CA=C;
CA.Intersect(A);
AABB ABC=AB;
ABC.Intersect(C);
fout<<A.Area()+B.Area()+C.Area()-AB.Area()-BC.Area()-CA.Area()+ABC.Area()<<" ";
fout<<A.Perimeter()+B.Perimeter()+C.Perimeter()-AB.Perimeter()-BC.Perimeter()-CA.Perimeter()+ABC.Perimeter();
fout.close();
return 0;
}