Pagini recente » Cod sursa (job #2024733) | Cod sursa (job #2021782) | Cod sursa (job #1070749) | Cod sursa (job #3243391) | Cod sursa (job #1561839)
#include <stdio.h>
#define ll long long
typedef struct {
int x, y;
} pair;
typedef struct {
pair down, up;
} cell;
cell empty;
/** MIN(X, Y). **/
int MIN(int X, int Y) {
return X < Y ? X : Y;
}
/** max(X, Y). **/
int MAX(int X, int Y) {
return X > Y ? X : Y;
}
/** Citeste dreptunghiul "d". **/
void read(cell *d, FILE *f) {
fscanf(f, "%d %d %d %d", &d -> down.x,
&d -> down.y,
&d -> up.x,
&d -> up.y);
}
/** Perimetrul dreptunghiului "d". **/
ll int perimeter(cell *d) {
return (ll)2 * (d -> up.x - d -> down.x + d -> up.y - d -> down.y);
}
/** Aria dreptunghiului "d". **/
ll int area(cell *d) {
return (ll)(d -> up.x - d -> down.x) * (d -> up.y - d -> down.y);
}
/** Intersectia dreptunghiurilor "A" si "B". **/
cell intersect(cell *A, cell *B) {
cell curr;
curr.down.x = MAX(A -> down.x, B -> down.x);
curr.down.y = MAX(A -> down.y, B -> down.y);
curr.up.x = MIN(A -> up.x, B -> up.x);
curr.up.y = MIN(A -> up.y, B -> up.y);
if ((curr.down.x > curr.up.x) || (curr.down.y > curr.up.y)) {
curr = empty;
}
return curr;
}
int main(void) {
cell d_0, d_1, d_2, d_01, d_02, d_12, d_012;
FILE *f = fopen("reuniune.in", "r");
/* Citirea datelor. */
read(&d_0, f);
read(&d_1, f);
read(&d_2, f);
fclose(f);
/* Calcularea solutiei. */
d_01 = intersect(&d_0, &d_1);
d_02 = intersect(&d_0, &d_2);
d_12 = intersect(&d_1, &d_2);
d_012 = intersect(&d_01, &d_2);
ll int p = perimeter(&d_0) + perimeter(&d_1) + perimeter(&d_2)
- perimeter(&d_01) - perimeter(&d_02) - perimeter(&d_12)
+ perimeter(&d_012);
ll int a = area(&d_0) + area(&d_1) + area(&d_2)
- area(&d_01) - area(&d_02) - area(&d_12)
+ area(&d_012);
/* Afisarea solutiei. */
freopen("reuniune.out", "w", stdout);
fprintf(stdout, "%lld %lld\n", a, p);
fclose(stdout);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}