Pagini recente » Cod sursa (job #800954) | Cod sursa (job #1308762) | Cod sursa (job #2754273) | Cod sursa (job #1704191) | Cod sursa (job #1452014)
#include <stdio.h>
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define MAX(A, B) ((A) > (B) ? (A) : (B))
typedef long long ll;
typedef struct {
int x0, y0; // stanga jos
int x1, y1; // dreapta sus
} retangle;
inline ll surface(const retangle &a) {
ll s = 1LL * (a.x1 - a.x0) * (a.y1 - a.y0);
return s & -(s > 0LL);
}
inline ll perimiter(const retangle &a) {
ll p = 1LL * (a.x1 - a.x0 + a.y1 - a.y0) << 1;
return p & -(p > 0LL);
}
inline retangle intersect(const retangle &a, retangle &b) {
retangle c;
c.x0 = MAX(a.x0, b.x0);
c.y0 = MAX(a.y0, b.y0);
c.x1 = MIN(a.x1, b.x1);
c.y1 = MIN(a.y1, b.y1);
return c;
}
int main(void) {
FILE *f = fopen("reuniune.in", "r");
retangle a, b, c;
fscanf(f, "%d%d%d%d%d%d%d%d%d%d%d%d", &a.x0, &a.y0, &a.x1, &a.y1, &b.x0, &b.y0, &b.x1, &b.y1, &c.x0, &c.y0, &c.x1, &c.y1);
fclose(f);
f = fopen("reuniune.out", "w");
fprintf(f, "%lld %lld\n", surface(a) + surface(b) + surface(c) - surface(intersect(a, b)) - surface(intersect(a, c)) - surface(intersect(b, c)) + surface(intersect(intersect(a, b), c)),
perimiter(a) + perimiter(b) + perimiter(c) - perimiter(intersect(a, b)) - perimiter(intersect(a, c)) - perimiter(intersect(b, c)) + perimiter(intersect(intersect(a, b), c)));
fclose(f);
return 0;
}