Pagini recente » Cod sursa (job #2298133) | Cod sursa (job #1204002) | Cod sursa (job #2701935) | Cod sursa (job #1505466) | Cod sursa (job #267942)
Cod sursa(job #267942)
#include <fstream>
#include <cassert>
using namespace std;
ifstream fin("reuniune.in");
ofstream fout("reuniune.out");
struct interval { long long a,b; };
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 (i1.a > i2.a) {
x = &i2;
y = &i1;
}
interval r;
if (x->a > y->b || y->a > x->b) {
r.a = r.b = 0;
} else
if (x->a <= y->a && y->b <= x->b) {
r.a = y->a;
r.b = y->b;
} else
if (x->b - y->a < x->b - x->a && y->a - x->a < x->b - x->a) {
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; };
dreptunghi ( long long x1, long long y1, long long x2, long long y2 ) {
x.a = x1; x.b = x2; y.a = y1; y.b = y2;
if (x.a > x.b) x.a ^= x.b ^= x.a ^= x.b;
if (y.a > y.b) y.a ^= y.b ^= y.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);
return r;
};
long long 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;
}