Pagini recente » Cod sursa (job #895893) | Cod sursa (job #3142746) | Cod sursa (job #149751) | Cod sursa (job #627853) | Cod sursa (job #267961)
Cod sursa(job #267961)
#include <fstream>
#include <cassert>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
struct interval {
long long a,b;
long long length() { return b-a; };
};
interval operator+ ( interval i1, interval i2 ) {
if (i1.a > i1.b) i1.a ^= i1.b ^= i1.a ^= i1.b;
if (i2.a > i2.b) i2.a ^= i2.b ^= i2.a ^= i2.b;
interval *x = &i1, *y = &i2;
if (x->a > y->a) {
interval *aux = x;
x = y;
y = aux;
}
interval r;
if (y->a >= x->b) {
r.a = r.b = 0;
} else
if (y->b <= x->b) {
r.a = y->a;
r.b = y->b;
} else
if (x->a < y->a && y->a < x->b) {
r.a = y->a;
r.b = x->b;
} else {
assert(false);
}
return r;
};
class dreptunghi {
interval x, y;
friend istream& operator>> ( istream& stream, dreptunghi& d );
friend dreptunghi operator+ ( dreptunghi x, dreptunghi y );
public:
dreptunghi() {};
dreptunghi ( interval a, interval b ) { x = a; y = b; };
long long area() {
return (x.b - x.a)*(y.b - y.a);
};
long long perimeter() {
return (x.b - x.a)*2 + (y.b - y.a)*2;
};
};
istream& operator>> ( istream& stream, dreptunghi& d ) {
stream >> d.x.a >> d.y.a >> d.x.b >> d.y.b;
return stream;
};
dreptunghi operator+ ( dreptunghi a, dreptunghi b ) {
dreptunghi r(a.x + b.x, a.y + b.y);
if (r.x.length() == 0) r.y.a = r.y.b = 0;
if (r.y.length() == 0) r.x.a = r.x.b = 0;
return r;
};
int main() {
dreptunghi d1,d2,d3;
fin >> d1 >> d2 >> d3;
dreptunghi d12 = d1 + d2,d13 = d1 + d3,d23 = d2 + d3,d123 = d1 + d2 + d3;
long long area = d1.area() + d2.area() + d3.area();
area -= (d1+d2).area() + (d1+d3).area() + (d2+d3).area();
area += (d1+d2+d3).area();
long long perimeter = d1.perimeter() + d2.perimeter() + d3.perimeter();
perimeter -= (d1+d2).perimeter() + (d1+d3).perimeter() + (d2+d3).perimeter();
perimeter += (d1+d2+d3).perimeter();
fout << area << ' ' << perimeter << '\n';
return 0;
}