Cod sursa(job #2764646)

Utilizator DragosC1Dragos DragosC1 Data 21 iulie 2021 22:03:51
Problema Reuniune Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.33 kb
#include <fstream>
#include <iostream>
using namespace std;
 
struct dreptunghi {
    long long x1, y1, x2, y2;
};
 
dreptunghi D[4];
 
void read() {
    int i;
    ifstream f("reuniune.in");
    for (i = 1; i <= 3; i++) 
        f >> D[i].x1 >> D[i].y1 >> D[i].x2 >> D[i].y2;
}
 
long long A, P;
 
#define abs(x) (x >= 0 ? x : -x)

void solve() {
    int i;
    long long A1, A2, A3, A12, A13, A23, A123;
 
    // arie fiecare dreptunghi
    A1 = abs(D[1].x2 - D[1].x1) * abs(D[1].y2 - D[1].y1);
    A2 = abs(D[2].x2 - D[2].x1) * abs(D[2].y2 - D[2].y1);
    A3 = abs(D[3].x2 - D[3].x1) * abs(D[3].y2 - D[3].y1);
 
    A12 = abs(min(D[1].x2, D[2].x2) - max(D[1].x1, D[2].x1)) * abs(min(D[1].y2, D[2].y2) - max(D[1].y1, D[2].y1));
    A13 = abs(min(D[1].x2, D[3].x2) - max(D[1].x1, D[3].x1)) * abs(min(D[1].y2, D[3].y2) - max(D[1].y1, D[3].y1));
    A23 = abs(min(D[2].x2, D[3].x2) - max(D[2].x1, D[3].x1)) * abs(min(D[2].y2, D[3].y2) - max(D[2].y1, D[3].y1));
 
    A123 = abs(min(D[1].x2, min(D[2].x2, D[3].x2)) - max(D[1].x1, max(D[2].x1, D[3].x1))) * abs(min(D[1].y2, min(D[2].y2, D[3].y2)) - max(D[1].y1, max(D[2].y1, D[3].y1)));
 
    // principiul includerii si excluderii
    A = A1 + A2 + A3 - A12 - A13 - A23 + A123;
 
 
    // perimetru fiecare dreptunghi
    long long P1, P2, P3, P12, P13, P23, P123;
    P1 = 2 * abs(D[1].x2 - D[1].x1) + 2 * abs(D[1].y2 - D[1].y1);
    P2 = 2 * abs(D[2].x2 - D[2].x1) + 2 * abs(D[2].y2 - D[2].y1);
    P3 = 2 * abs(D[3].x2 - D[3].x1) + 2 * abs(D[3].y2 - D[3].y1);
 
    P12 = 2 * abs(min(D[1].x2, D[2].x2) - max(D[1].x1, D[2].x1)) + 2 * abs(min(D[1].y2, D[2].y2) - max(D[1].y1, D[2].y1));
    P13 = 2 * abs(min(D[1].x2, D[3].x2) - max(D[1].x1, D[3].x1)) + 2 * abs(min(D[1].y2, D[3].y2) - max(D[1].y1, D[3].y1));
    P23 = 2 * abs(min(D[2].x2, D[3].x2) - max(D[2].x1, D[3].x1)) + 2 * abs(min(D[2].y2, D[3].y2) - max(D[2].y1, D[3].y1));
 
    P123 = 2 * abs(min(D[1].x2, min(D[2].x2, D[3].x2)) - max(D[1].x1, max(D[2].x1, D[3].x1))) + 2 * abs(min(D[1].y2, min(D[2].y2, D[3].y2)) - max(D[1].y1, max(D[2].y1, D[3].y1)));
 
    // principiul includerii si excluderii
    P = P1 + P2 + P3 - P12 - P13 - P23 + P123;
}
 
void output() {
    ofstream g("reuniune.out");
    g << A << ' ' << P;
    g.close();
}
 
int main() {
    read();
    solve();
    output();
    return 0;
}