Pagini recente » Cod sursa (job #1514179) | Cod sursa (job #2743602) | Cod sursa (job #3148081) | Cod sursa (job #1302993) | Cod sursa (job #1044779)
#include <fstream>
#include <sstream>
using namespace std;
class Rectangle {
public:
int xLeft, yDown;
int xRight, yUp;
Rectangle(int xa = 0,int ya = 0,int xb = 0,int yb = 0) {
xLeft = xa;
yDown = ya;
xRight = xb;
yUp = yb;
}
Rectangle(const Rectangle &R) {
xLeft = R.xLeft;
yDown = R.yDown;
xRight = R.xRight;
yUp = R.yUp;
}
long long getArea() {
return 1LL * (xRight - xLeft) * (yUp - yDown);
}
long long getPerimeter() {
return 2LL * (xRight - xLeft + yUp - yDown);
}
void getIntersection(const Rectangle &r) {
xLeft = max(xLeft,r.xLeft);
yDown = max(yDown,r.yDown);
xRight = min(xRight,r.xRight);
yUp = min(yUp,r.yUp);
if (xLeft >= xRight || yDown >= yUp) {
xLeft = xRight = 0;
yDown = yUp = 0;
}
}
friend istream& operator >> (istream &in,Rectangle &R) {
in >> R.xLeft >> R.yDown >> R.xRight >> R.yUp;
return in;
}
friend ostream& operator << (ostream &out,const Rectangle &R) {
out << R.xLeft << " " << R.yDown << " " << R.xRight << " " << R.yUp;
return out;
}
};
int main()
{
ifstream cin("reuniune.in");
ofstream cout("reuniune.out");
const int nmax = 3;
Rectangle r[nmax];
int n = 3;
for (int i = 0;i < n;i++) {
cin >> r[i];
}
long long intersectionArea = 0;
long long intersectionPerimeter = 0;
for (int i = 1;i < (1 << n);i++) {
int bitCount = 0;
Rectangle intersectionRectangle(-int(1e9),-int(1e9),int(1e9),int(1e9));
for (int j = 0;j < n;j++) {
if ( (i >> j) & 1) {
bitCount++;
intersectionRectangle.getIntersection(r[j]);
}
}
if (bitCount & 1) {
intersectionArea += intersectionRectangle.getArea();
intersectionPerimeter += intersectionRectangle.getPerimeter();
} else {
intersectionArea -= intersectionRectangle.getArea();
intersectionPerimeter -= intersectionRectangle.getPerimeter();
}
}
cout << intersectionArea << " " << intersectionPerimeter << "\n";
return 0;
}